创建带有过度分区的汇总结果

时间:2019-04-13 16:33:19

标签: 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   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。怎么解决呢?预先感谢

1 个答案:

答案 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'