按不同的值求和

时间:2015-09-20 13:52:56

标签: sql tsql group-by sum case

我有下面的代码,它带来了一天“GRLastDt”完成或未完成的总和,但我没有考虑重复的返回ID。有没有办法每天为每个返回ID返还一笔金额?

例如,当天24/5/15可能有5行到当天有'X'完成然而2行有重复的返回ID'RtnId'因此总和将是4而不是5 24/5 / 15。

SELECT  
    CONVERT(varchar(15), GRLastDt, 111) AS Date_,
    SUM(CASE WHEN Complete = 'X' THEN 1 ELSE 0 END) AS Complete, 
    SUM(CASE WHEN Complete <> 'X' /*and RtnDt <>GRLastDt*/THEN 1 ELSE 0 END) AS Due
FROM [dbo].[vw_AN_Admin_VendorReturns]
WHERE (GRLastDt >= GETDATE() - 30)   
GROUP BY CONVERT(varchar(15), GRLastDt, 111),GRLastDt

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,我认为你可以改变这一行:

SUM(CASE WHEN Complete = 'X' THEN 1 ELSE 0 END) AS Complete,

到此:

COUNT(DISTINCT CASE WHEN Complete = 'X' THEN RtnId END) AS Complete, 

您可能希望对到期计算进行相同的更改。

相关问题