使用子查询返回具有多个条件的聚合函数(和)

时间:2019-07-04 02:45:31

标签: sql subquery grouping

我希望根据特定行中的多个条件为表中的每一行产生总和(或计数)。

我可以使用子查询但只有一个条件才能使它工作。如果添加第二个,则需要使用分组,然后返回多个行并中断查询。

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 :(得分:0)

您要查找简单的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;