Создать агрегированный результат с перегородкой - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть таблица, для которой необходимо вычислить некоторые значения.

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, slid.На самом деле я могу получить значения SUMbySLID с помощью GROUP By Query.Я попытался использовать функцию OVER PARTION BY, чтобы я мог показать все данные в столбце 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'  

Я хочу, чтобы номер идентификатора 2 по-прежнему показывал SumBySLID = 800 даже посленекоторый фильтр с предложением WHERE.Как это решить?Заранее спасибо

1 Ответ

1 голос
/ 13 апреля 2019

Использовать подзапрос перед фильтрацией:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...