Строки даты в столбцы дня недели - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть таблица, и у меня есть пользователи с датами ...

| Employee_Name | Date       |
| CG            | 2019-04-22 |
| CG            | 2019-04-26 |
| CG            | 2019-04-24 |

Я пытаюсь получить результаты, поэтому, когда я запрашиваю и говорю Date BETWEEN (@start AND @end), это даст мне такие результаты, как:

EMPLOYEE_NAME | Monday     | Tuesday | Wednesday  | Thursday | Friday     | Saturday | Sunday |
CG            | 2019-04-22 | NULL    | 2019-04-24 | NULL     | 2019-04-26 | NULL     | NULL   |

Я затрудняюсь честно почесать голову - я знаю, что смогу сделать это с помощью оси.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Следующее должно работать (идеально, если @ d2 - @ d1 <7, иначе будет отображаться первая дата для каждого дня недели): </p>

SELECT Employee_Name
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Sunday'    THEN Date END) AS Sunday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Monday'    THEN Date END) AS Monday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Tuesday'   THEN Date END) AS Tuesday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Wednesday' THEN Date END) AS Wednesday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Thursday'  THEN Date END) AS Thursday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Friday'    THEN Date END) AS Friday
     , MIN(CASE WHEN DATENAME(dw, Date) = 'Saturday'  THEN Date END) AS Saturday
FROM t
WHERE Date BETWEEN @d1 AND @d2
GROUP BY Employee_Name
0 голосов
/ 26 апреля 2019

Вот решение Pivot.

Я добавил дополнительные образцы данных (еще один сотрудник и две даты), чтобы проверить их:

declare @weekday table (weekday varchar(10))
insert into @weekday (weekday) values 
('Monday'),
('Tuesday'),
('Wednesday'),
('Thursday'),
('Friday'),
('Saturday'), 
('Sunday')

select p.employee_name,[Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday],[Sunday]
from (
select t.employee_name,t.date,w.weekday from (
select *, datename(weekday,date) as weekday
from #test) t
right join @weekday w
on w.weekday = t.weekday) s
pivot
(max(date)
for weekday in ([Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday],[Sunday])
) as p
where p.employee_name is not null

Пожалуйста, измените имя таблицы соответственно. (Я использовал #test)

Результат теста:

DB <> Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...