использование подзапроса для возврата агрегатной функции (суммы) с несколькими критериями - PullRequest
0 голосов
/ 04 июля 2019

Я хочу получить сумму (или число) для каждой строки в таблице на основе нескольких критериев из конкретной строки.

Я могу заставить это работать, используя подзапрос, но только с одним критерием.Если я добавлю 2-е, тогда мне потребуется использовать группировку, которая затем возвращает несколько строк и разбивает запрос.

SELECT top (10)
       [DateTime]
      ,[CustNo]
      ,[AccountId2]
      ,[amount]
     into ##allMM
  FROM [OLBRET_COPY].[dbo].[ActivityLogs]
  where CustNo in ('123456')

select 
       [DateTime]
      ,[CustNo]
      ,[AccountId2]
      ,[ClientIp]
      ,[ReferenceNo]
      ,[ErrorCode]
      ,[ErrorMessage]
      (select 
       sum(amount) 
       from ##allMM 
       group by ##allMM.CustNo 
       having ##allMM.CustNo = a.CustNo and ##allMM.DateTime < a.DateTime
      ) as sumCustno
into ##finalSel
FROM [OLBRET_COPY].[dbo].[ActivityLogs] a
where CustNo in ('123456')

select * from finalSel
drop table ##allMM, ##finalSel

В приведенном выше примере используются два критерия (custno и DateTime), но мне, вероятно, потребуется добавитьдополнительные критерии позже.Я ожидаю, что вывод будет единственной суммой всех сумм в первой таблице, которые удовлетворяют всем условиям подзапроса.В настоящее время я ограничен одной учетной записью, поскольку база данных огромна.

Конечный результат должен выглядеть примерно так:

datetime  | custno | .... | sumCustNo
 3Jul2019 | 123456 | .....| 681.25
 2Jul2019 | 123456 | .... | 251.76
30Jun2019 | 345678 | .... | 1237.93

1 Ответ

0 голосов
/ 04 июля 2019

Вы ищете простой group by? Я думаю, что вы хотите совокупную сумму:

SELECT CONVERT(DATE, [DateTime]), CustNo,
       SUM([amount]),
       SUM(SUM(amount)) OVER (PARTITION BY CustNo ORDER BY CONVERT(DATE, [DateTime]))
FROM [OLBRET_COPY].[dbo].[ActivityLogs]
GROUP BY CONVERT(DATE, [DateTime]), CustNo;
...