Как объединить столбец даты в несколько столбцов по дням? - PullRequest
0 голосов
/ 22 мая 2019

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

   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 столбцах, поскольку они представляют каждый день недели, однако я не знаю, как классифицировать каждую строку на основе дату, а затем назначьте ее в правильном столбце.

Любая помощь, комментарий или предложение с благодарностью.

1 Ответ

1 голос
/ 23 мая 2019

Попробуйте это-

SELECT *
FROM
(
    SELECT B.emp_num,B.initial_date,B.Date_Only,B.job,
    (
        SELECT SUM(worked_hours) 
        FROM transactions 
        WHERE emp_num = B.emp_num AND  job = B.job
    ) worked_hours
    FROM 
    (
        SELECT emp_num,job,initial_date,worked_hours,CAST(initial_date AS DATE) Date_Only 
        FROM transactions
    )B
    WHERE initial_date between '2018-12-30 00:00:00' and '2019-01-05 23:59:59'
) A
PIVOT
(
    MAX(initial_date)
    FOR Date_Only IN ([2019-01-01],[2019-01-02],[2019-01-03])
)PVT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...