我试图将所有row_number = 1加起来,但我希望它包含所有其他行,但只显示row_number 1的记录,但是将所有其他行相加。
SELECT
A.TEST, A.BLOCK, A.POLICY, A.SAL_COVERAGE,
A.YEAR, A.ZIP, A.COVERAGE,
SUM(A.WP) AS WP,
SUM(A.WE) AS WE,
SUM(A.EP) AS EP,
SUM(A.EE) AS EE
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY ZIP ORDER BY ZIP) AS TEST,
BLOCK, POLICY, SAL_COVERAGE,
YEAR, ZIP, COVERAGE,
SUM(WP) AS WP,
SUM(WE) AS WE,
SUM(EP) AS EP,
SUM(EE) AS EE
FROM
[Reports].[dbo].[DGTESTING]
GROUP BY
BLOCK, POLICY, SAL_COVERAGE, YEAR, ZIP, COVERAGE) AS A
WHERE
TEST = 1
AND A.POLICY = 'XXXX'
GROUP BY
A.TEST, A.BLOCK, A.POLICY, A.SAL_COVERAGE, A.YEAR, A.ZIP, A.COVERAGE
我得到的结果是这样的:
我希望每个ZIP都能汇总到这条记录中,但我只得到1.看起来SQL正在做的一切都是正确的,但我错过了一种方法来做我想要的事情。
示例数据
--------------------------------------------------------------------------------------
|TEST|BLK|POL |SAL|YEAR|ZIP |COV |WP |WE |EP |EE
--------------------------------------------------------------------------------------
|1 |1 |XXX |1 |2014|96003 |Bod |-143|-10.888157|-87.59|-6.67
--------------------------------------------------------------------------------------
|32 |6 |XXX |1 |2015|96007 |Bod |0 |0 |-55.41|-4.21
--------------------------------------------------------------------------------------
预期数据
-------------------------------------------------------------------------------------
|TEST|BLK|POL|SAL|YEAR|ZIP |COV|WP |WE |EP |EE
--------------------------------------------------------------------------------------
|1 | 1|XXX| 1|2014|96003|Bod|-143|-10.888157|-143|-10.88
------------------------------------------------------------------------------------
这是更多数据
答案 0 :(得分:0)
下面的查询将为整个表返回一行,就像问题中的预期结果一样。它将返回具有最小ZIP值的一行。
SUM(...) OVER()
对每一行的整个表进行求和。然后我们只选择一行rn=1
。首先运行内部查询以了解它的作用。
SELECT
A.TEST
,A.BLOCK
,A.POLICY
,A.SAL_COVERAGE
,A.YEAR
,A.ZIP
,A.COVERAGE
,A.WP
,A.WE
,A.EP
,A.EE
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY ZIP) AS rn
,BLOCK
,POLICY
,SAL_COVERAGE
,YEAR
,ZIP
,COVERAGE
,SUM(WP) OVER() AS WP
,SUM(WE) OVER() AS WE
,SUM(EP) OVER() AS EP
,SUM(EE) OVER() AS EE
FROM [Reports].[dbo].[DGTESTING]
) AS A
WHERE
rn = 1
;