Sql 创建具有过分区的聚合结果
我有一个表,需要计算一些值Sql 创建具有过分区的聚合结果,sql,sql-server,Sql,Sql Server,我有一个表,需要计算一些值 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
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和SLIDE分组。事实上,我可以通过分组查询得到SUMbySLID值。我尝试按函数使用OVER PARTION,这样我就可以用列SUMbySLID显示所有数据。但是,当我添加一个过滤器date='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'
我希望id号2即使在使用WHERE子句进行一些筛选之后仍然显示SumBySLID=800。如何解决?提前感谢在筛选之前使用子查询:
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'