У меня есть следующая таблица, в которой отображаются часы, которые сотрудники отработали на назначенной работе в день.
emp_num | job | initial_date | worked_hours
---------- -------- --------------------- -------------
100001 VESS_10 2019-01-01 06:00:00 2
100001 VESS_20 2019-01-01 08:00:00 1
100001 VESS_30 2019-01-02 06:00:00 1
100002 VESS_20 2019-01-02 08:00:00 2
100002 VESS_20 2019-01-03 10:00:00 2
100003 VESS_30 2019-01-01 11:00:00 1
Я бы хотел отобразить следующий результат:
emp_num | job | 2019-01-01 | 2019-01-02 | 2019-01-03 | worked_hours
---------- -------- ------------------- --------------- ------------------ ------------
100001 VESS_10 2019-01-01 06:00:00 NULL NULL 2
100001 VESS_20 2019-01-01 08:00:00 NULL NULL 1
100001 VESS_30 NULL 2019-01-02 06:00:00 NULL 1
100002 VESS_20 NULL 2019-01-02 08:00:00 NULL 2
100002 VESS_20 NULL NULL 2019-01-03 10:00:00 2
100003 VESS_30 2019-01-01 11:00:00 NULL NULL 1
Я попытался повернуть таблицу с помощью следующего запроса:
select * from
(
select emp_num, job, initial_date worked_hours
from transactions
where initial_date between '2019-04-21 00:00:00' and '2019-04-27 23:59:59'
)
as hours_table
pivot (
sum(worked_hours)
for initial_date in (['my problem comes here'])])
)
Проблема с приведенным выше кодом заключается в том, что в операторе for
я хочу объявить даты в 7 столбцах, поскольку они представляют каждый день недели, однако я не знаю, как классифицировать каждую строку на основе дату, а затем назначьте ее в правильном столбце.
Любая помощь, комментарий или предложение с благодарностью.