0

我们应该如何重新使用这个查询,我没有找到解决方案放弃每个组的第二行...我需要帮助请...有没有一个函数什么可以与rolllup团体只返回不同的值(这里不同,不能使用)如何获得具有不同值的结果当我们使用组

SELECT 
    -- ROW_NUMBER() over (ORDER BY FF_DATE asc) as "numSituation" 
    FF_NUMERO as "numFacture" 
    , FF_DATE as "dateFacture" 
    , FF_DATEREG as "dateReglement" 
    , SUM(FF_D_HT) as "montantHT" 
    , SUM(FF_D_TTC) as "montantTTC" 
FROM F_FACTURESFOU 
INNER JOIN F_LIGNEFACFOU ON LFF_FFPTR = FF_NUMERO 
INNER JOIN F_LOT ON LFF_LT_IDENT = LT_IDENT 
WHERE LFF_CODE_AFF = '14031-00' AND LT_CODE IN ('S83') AND FF_DATEVALID is not null 
GROUP BY FF_NUMERO , FF_DATE, FF_DATEREG WITH ROLLUP 
HAVING ((FF_NUMERO is not null and FF_DATE IS NOT NULL) OR (FF_NUMERO is null and FF_DATE is null)) 
ORDER BY GROUPING(FF_NUMERO), FF_NUMERO, GROUPING (FF_DATE), FF_DATE , GROUPING (FF_DATEREG), FF_DATEREG 

这是结果:

15E1500062 2015-07-24 00:00:00.000 NULL 3000.00 3600.00 
15E1500062 2015-07-24 00:00:00.000 NULL 3000.00 3600.00 
15E1500063 2015-07-31 00:00:00.000 NULL 6000.00 7200.00 
15E1500063 2015-07-31 00:00:00.000 NULL 6000.00 7200.00 
15E1600423 2015-09-11 00:00:00.000 NULL 3000.00 3600.00 
15E1600423 2015-09-11 00:00:00.000 NULL 3000.00 3600.00 
NULL      NULL  NULL 12000.00 14400.00 

回答

0

您可以使用SQL ROW_NUMBER()的分区功能通过条款 您可以对每个组中由部分定义的结果集中的行进行编号银行足球比赛By子句

然后你就可以用ROW_NUMBER值大于或等于排除所有行2

请检查SQL教程Row_Number() Over Partition By to delete duplicate rows在SQL Server

ROW_NUMBER() over (Partition By FF_NUMERO, FF_DATE ORDER BY 

您可以使用SQL CTE expression如下

;with cte as (
SELECT 
    ROW_NUMBER() over (Partition By FF_NUMERO, FF_DATE ORDER BY .... DESC) as rn, 
    .... 
FROM .... 
) 
SELECT * from cte where rn = 1 
0

谢谢您的回答Eralper,我可以使用row_number和关键词“with”...并且它可以工作(y)

相关问题