我有一张表,需要计算一些值。
id branch coa mtu slid db cr date SumBySLID
1 0001 XYZ IDR 123 1000 300 2016-01-01 800
2 0001 XYZ IDR 123 400 500 2017-03-01 800
3 0001 XYZ IDR 123 700 500 2011-03-01 800
4 0001 XYZ IDR 1111 400 500 2017-03-01 6400
5 0001 XYZ IDR 1111 7000 500 2017-03-01 6400
列SUMbySLID由SUM(db-cd)生成,并按分支,coa,mtu,滑动条分组。实际上,我可以通过GROUP BY Query获取SUMbySLID值。我尝试使用OVER PARTION BY函数,以便可以显示带有SUMbySLID列的所有数据。但是,当我添加一个过滤器日期='2017/01/01'时,ID = 2的数据显示SumBySLID为-100。
SELECT TOP 1000 [id]
,[branch]
,[coa]
,[mtu]
,[slid]
,[db]
,[cr]
,date
,SUM(db-cr) OVER(PARTITION BY branch,coa,mtu,slid)
FROM [Testing].[dbo].[Tbl_Test_COA]
WHERE date='2017-03-01'
我希望即使在使用WHERE子句进行某些过滤之后,ID号2仍然显示SumBySLID = 800。怎么解决呢?预先感谢
答案 0 :(得分:1)
在过滤之前使用子查询:
SELECT tc.*
FROM (SELECT tc.*,
SUM(db-cr) OVER (PARTITION BY branch, coa, mtu, slid)
FROM [Testing].[dbo].[Tbl_Test_COA] tc
) tc
WHERE date = '2017-03-01'