Группа случаев суммы SQL - PullRequest
0 голосов
/ 25 июня 2018

У меня относительно простой запрос, и теперь я должен внести то, что кажется простым, в этот запрос. Это не очень хорошо, хотя.

Запрос:

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 голосов
/ 25 июня 2018

Чтобы избежать чрезмерного усложнения агрегации с помощью операторов 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...