简体   繁体   English

SQL SUM()函数忽略WHERE子句和CASE语句

[英]SQL SUM() function ignoring WHERE clause and CASE statement

    SELECT      u.FirstName + ' ' + u.LastName as 'User',
            COUNT(*) as 'Number of Calls',
            CONVERT(varchar(4), SUM(CASE WHEN c.FromTime BETWEEN @FromDate AND @ToDate
                THEN DATEDIFF(mi, c.FromTime, c.ToTime) ELSE 0 END) / 60) + ':' + 
            CASE WHEN SUM(CASE WHEN c.FromTime BETWEEN @FromDate AND @ToDate
                THEN DATEDIFF(mi, c.FromTime, c.ToTime) ELSE 0 END) % 60 < 10 THEN '0' ELSE '' END +
            CONVERT(varchar(2), SUM(DATEDIFF(mi, c.FromTime, c.ToTime)) % 60) as 'Total Time Spent',
            CONVERT(varchar(4), AVG(DATEDIFF(mi, c.FromTime, c.ToTime)) / 60) + ':' +
            CASE WHEN AVG(DATEDIFF(mi, c.FromTime, c.ToTime)) % 60 < 10 THEN '0' ELSE '' END +
            CONVERT(varchar(2), AVG(DATEDIFF(mi, c.FromTime, c.ToTime)) % 60) as 'Average Call Time'
FROM        Calls c
JOIN        Users u ON u.UserID = c.TakenBy
WHERE       c.FromTime BETWEEN @FromDate AND @ToDate
GROUP BY    u.UserID, u.FirstName, u.LastName
ORDER BY    u.FirstName + ' ' + u.LastName

The preceding SQL query returns the correct "Number of Calls" but the "Total Time" and "Average Time" are always the same regardless of the # of calls (which is obviously wrong). 前面的SQL查询返回正确的“调用次数”,但“总时间”和“平均时间”始终相同,无论调用次数多少(显然是错误的)。

I've read and tried to implement using the CASE WHEN __ Then value ELSE 0 inside SUM but it still returns an incorrect value. 我已阅读并尝试使用CASE WHEN __然后在SUM内部对ELSE 0进行实现,但它仍然返回不正确的值。

The only way I can get this query to return correct results is if I completely strip out all other info, eg 我可以获得此查询以返回正确结果的唯一方法是,如果我完全删除所有其他信息,例如

SELECT SUM(DATEDIFF(mi, FromTime, ToTime)) FROM Calls WHERE c.FromTime BETWEEN...

How can I still use my JOIN and GROUP BY and get the aggregate functions to give me the results I want? 我怎样才能使用我的JOIN和GROUP BY并获得聚合函数来给我想要的结果?

Thanks for any and all help! 感谢您的帮助!

您可能最好使用子查询,例如在SELECT部分​​中,添加类似(SELECT SUM(...) FROM ... WHERE ...) AS total_sum

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM