我希望根据特定行中的多个条件为表中的每一行产生总和(或计数)。
我可以使用子查询但只有一个条件才能使它工作。如果添加第二个,则需要使用分组,然后返回多个行并中断查询。
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
答案 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;