Сложная сводная таблица SQL Server, включающая пустые и пустые значения - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно разделить столбец «dep» на 2 разных столбца, один из которых «записан», а другой «не записан». столбец «не записано» будет содержать сумму времени для записей, где «dep» пустое или пустое для этого дня. В «записанном» столбце должна отображаться сумма времени для того дня, когда столбец «dep» не является пустым или пустым.

Пока это то, что у меня есть

 SELECT Cast(Start_Time AS DATE) AS Date, dep, 
 sum(time) as "Total Time"
 FROM A6K_Events
 Group By Cast(Start_Time AS DATE), dep

и это дает

 +------------+--------------+------------+
 | Date       | Dep          | Total Time |
 +------------+--------------+------------+
 | 2018-06-29 | Null         | 3544       |
 +------------+--------------+------------+
 | 2018-06-29 | Other        | 268        |
 +------------+--------------+------------+
 | 2018-06-29 | Training     | 471        |
 +------------+--------------+------------+
 | 2018-06-29 | Change Point | 371        |
 +------------+--------------+------------+
 | 2018-06-28 | Null         | 4519       |
 +------------+--------------+------------+
 | 2018-06-28 | Training     | 1324       |
 +------------+--------------+------------+
 | 2018-06-28 |              | 50         |
 +------------+--------------+------------+

Это то, что я хотел бы, чтобы конечный результат был

+------------+----------+------------+
| Date       | Recorded | Unrecorded |
+------------+----------+------------+
| 2018-06-29 | 1110     | 3544       |
+------------+----------+------------+
| 2018-06-28 | 1324     | 4569       |
+------------+----------+------------+

Любые предложения или помощь будут оценены. Я не могу понять, как повернуть и отфильтровать нулевые и пустые значения в один столбец, а другие заполнить значения в другой столбец.

Спасибо.

1 Ответ

0 голосов
/ 30 июня 2018

Pivot не требуется, мы можем получить данные с помощью оператора CASE

 SELECT start_time as Date, sum(case when dep is not NULL or dep <> '' then time end) as "Recorded", sum(case when dep is NULL or dep = '' then time end) as "Unrecorded"
 FROM A6K_Events
 Group By start_time order by 1 desc
...