SQL总和案例组

时间:2018-06-25 16:38:30

标签: sql sql-server-2008

我有一个相对简单的查询,现在必须对该查询进行简单的更改。不过进展并不顺利。

查询:

select filekey, eventdate, hourstype, hours from hourshist

产生以下结果:

filekey eventdate hourstype hours
1       6/1/2018   1          9
1       6/1/2018   2          3
1       6/2/2018   1          8

这很好,直到要求进行更改为止,该更改指出如果小时类型1和2在同一天发生,则小时类型保持为1,然后将小时(类型1或2)相加。任何其他小时类型(3、4、5等)都不会累加,并显示为自己的行。带有小时类型1或2,但不是两个都没有的日子应该完全不变。它应产生以下结果:

filekey eventdate hourstype hours
1       6/1/2018   1          12
1       6/2/2018   1          8

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为了避免使用case语句使聚合变得过于复杂,我将使用两个查询和一个联合来使聚合保持相当简单。以下在我的环境中会产生您想要的结果。

SELECT filekey, eventdate, 1 AS 'hourstype', SUM(hours) AS 'hours' FROM hourshist
WHERE hourstype IN (1,2)
GROUP BY filekey, eventdate
UNION
SELECT filekey, eventdate, hourstype, hours FROM hourshist
WHERE hourstype NOT IN (1,2);

我使用以下内容创建了您描述的测试环境:

CREATE TABLE hourshist
(
filekey INT,
eventdate DATE,
hourstype INT,
hours INT
);

INSERT INTO hourshist
VALUES (1,'6/1/2018',1,9)
,(1,'6/1/2018',2,3)
,(1,'6/2/2018',1,8);