Как повернуть строки к данным с помощью T-SQL? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть следующие данные:

code  desc       amt   month
----- ---------- ----- ------
aa    item aa    12    4/2019
aa    item aa    7     5/2019
bb    item bb    5     4/2019
bb    item bb    35    5/2019
bc    widget bc  109   3/2019
bc    widget bc  100   4/2019
df    widget df  29    5/2019

Я хочу повернуть эти данные так, чтобы они выглядели так:

code  desc       3/2019   4/2019   5/2019
----- ---------- -------- -------- --------
aa    item aa         0       12        7
bb    item bb         0        5       35
bc    widget bc     109      100        0
df    widget df       0        0       29

Все сводные примеры, которые я вижу, включают функции агрегации, но я не хочу агрегировать, мне просто нужно объединить / транспонировать данные. Как я могу это сделать?

Ответы [ 2 ]

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

Если вы хотите динамические столбцы ... тогда вам понадобится немного динамического SQL

* ** 1003 тысяча два * Пример
Declare @SQL varchar(max) = '
Select *
 From YourTable
 Pivot (sum(amt) For [month] in (' + Stuff((Select Distinct ','+QuoteName(month) 
                                               From YourTable A  
                                               Order By 1 
                                               For XML Path('')),1,1,'')  + ') ) p'
Exec(@SQL);
--Print @SQL

Returns

enter image description here

Динамический SQL выглядит следующим образом

Select *
 From  YourTable
 Pivot (sum(amt) For [month] in ([3/2019],[4/2019],[5/2019]) ) p
0 голосов
/ 17 апреля 2019

Существует функция поворота, которую вы можете напрямую использовать в T-sql, попробуйте это https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

...