我有一个相对简单的查询,现在必须对该查询进行简单的更改。不过进展并不顺利。
查询:
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
感谢您的帮助。
答案 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);