SukirtiShetty Ответов: 2

Как транспонировать строки в столбцы в sql.


Привет
Я хочу отобразить отчет по датам выбранного месяца и года. и в моем нижеприведенном запросе это сработало. Но проблема в том, что я хочу перенести строки даты в Столбцы.


Пожалуйста, кто-нибудь, помогите мне решить эту проблему.

Что я уже пробовал:

SELECT 
    a.Resources,a.dat_e,
     
    (COALESCE(SUM(CONVERT(INT, d.duration*6.25)), 0)) + (COALESCE(SUM(CONVERT(INT, b.image_count)), 0)) +(COALESCE(SUM(CONVERT(INT, e.image_count)), 0)/4) + (COALESCE(SUM(CONVERT(INT, f.doc_count*(cast(f.fieldscount as int)))), 0)) 
     AS Total
FROM 
    work a
    LEFT JOIN work d ON a.resources = d.resources and a.Workid_PK=d.workid_PK AND (d.scope = 'Technical Services' and d.work_area='other') AND a.dat_e=d.dat_e AND YEAR(d.dat_e) = '2018' AND (MONTH(d.dat_e) ='05') 
    LEFT JOIN work b ON a.resources = b.resources and a.Workid_PK=b.workid_PK AND (b.scope = 'LDD' AND b.Work_area='Coding') and a.dat_e=b.dat_e AND YEAR(b.dat_e) = '2018' AND (MONTH(b.dat_e)='05') 
    LEFT JOIN work e ON a.resources = e.resources and a.Workid_PK=e.workid_PK AND (e.scope = 'LDD' AND e.Work_area='QC') and a.dat_e=e.dat_e and YEAR(e.dat_e) = '2018' AND (MONTH(e.dat_e) ='05') 
    LEFT JOIN work f ON a.resources = f.resources and a.Workid_PK=f.workid_PK AND (f.scope = 'Coding' AND f.Work_area='Coding') and a.dat_e=f.dat_e AND YEAR(f.dat_e) = '2018' AND (MONTH(f.dat_e) ='05') 
where (YEAR(a.dat_e) = '2018' AND MONTH(a.dat_e) ='05')
   
GROUP BY
    a.Resources, a.dat_e




Выход есть:

John	5/1/2018		0
Ram	5/14/2018	     2000
John	5/2/2018		0
Ram	5/3/2018		0
Philip	5/10/2018	     8484
Prince	5/6/2018		0
John	5/4/2018		0
Ram	5/5/2018		0
John	5/6/2018		0
Ram	5/7/2018		0
Philip	5/8/2018		0
Prince	5/9/2018		0


но я хочу транспонировать столбец даты в качестве заголовка
кто-нибудь, пожалуйста, помогите мне решить эту проблему.


Res	5/1/2018	5/2/2018	5/3/2018	5/4/2018	5/5/2018	5/6/2018	5/7/2018	5/8/2018	5/9/2018	5/10/2018	5/11/2018	5/12/2018	5/13/2018	5/14/2018
Ram														2000
John		500												
Philip										8484				

2 Ответов

Рейтинг:
2

SukirtiShetty

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

Рейтинг:
2

Maciej Los

Ну, основываясь на документации, предоставленной OriginalGriff, вы можете добиться этого, используя "статическую" версию pivot (вы должны ввести имена столбцов для каждой даты):

SELECT Resources, [5/1/2018],	[5/2/2018],	[5/3/2018], ... [5/13/2018], [5/14/2018]
FROM (
    --Your query goes here!
) AS Src
PIVOT(Total FOR dat_e IN([5/1/2018],	[5/2/2018],	[5/3/2018], ... [5/13/2018], [5/14/2018])) AS PVT


Для "динамической" версии, где имена столбцов для даты создаются во время выполнения, см.:
Скрипт для создания динамических сводных запросов в SQL Server[^]
SQL Script: преобразование строк в столбцы с помощью Dynamic Pivot в SQL Server - статьи TechNet - США (английский) - TechNet Wiki[^]
Динамический свод в Sql Server | SqlHints.com[^]
Динамический сводный запрос в SQL Server - SQLRelease[^]
Динамический сводный запрос в SQL Server[^]