У меня есть столбец, содержащий диапазоны дат и количество прошедших дней, связанных с конкретным ID
(от одного до многих), исходя из количества связанных с ним записей. Я хочу, чтобы эти результаты были разбиты на столбцы, а не на отдельные строки. так из этого:
id_hr dd beg end
----------------------------------------
1 10 05/01/2019 15/01/2019
1 5 03/02/2019 08/02/2019
2 8 07/03/2019 15/03/2019
Может стать таким:
id_hr dd beg end dd beg end
--------------------------------- ---------------------
1 10 05/01/2019 15/01/2019 5 03/02/2019 08/02/2019
2 8 07/03/2019 15/03/2019
Я сделал то же самое на рабочем листе (сводная таблица), но таблица стала настолько медленной, насколько это возможно, поэтому я ищу более дружественный подход в SQL, я сделал CTE, который нумерует связанные строки, а затем выбрал каждый и отображать их в новых столбцах.
;WITH CTE AS(
SELECT PER_PRO, ID_HR, NOM_INC, rut_dv, dias_dur, INI, FIN,
ROW_NUMBER()OVER(PARTITION BY ID_HR ORDER BY SUBIDO) AS RN
FROM dbo.inf_vac WHERE PER_PRO = 201902
)
SELECT ID_HR, NOM_INC, rut_dv,
(case when rn = 1 then DIAS_DUR end) as DIAS_DUR1,
(case when rn = 1 then INI end) as INI1,
(case when rn = 1 then FIN end) as FIN1,
(case when rn = 2 then DIAS_DUR end) as DIAS_DUR2,
(case when rn = 2 then INI end) as INI2,
(case when rn = 2 then FIN end) as FIN2,
(case when rn = 3 then DIAS_DUR end) as DIAS_DUR3,
(case when rn = 3 then INI end) as INI3,
(case when rn = 3 then FIN end) as FIN3
FROM CTE
Что приводит меня к каждому столбцу, где он должен быть, но не сгруппирован. Использование GROUP BY отображает ошибку при выборе CTE.
rn id_hr dd beg end dd beg end
----------------------------------- ------------------------
1 1 10 05/01/2019 15/01/2019 NULL NULL NULL
2 1 NULL NULL NULL 5 03/02/2019 08/02/2019
1 2 8 07/03/2019 15/03/2019 NULL NULL NULL
Есть ли способ сгруппировать их по второму выбору?