如何制作动态的sql pivot

时间:2016-09-27 07:18:09

标签: sql pivot-table

我有一个带有以下

的select语句
select country,city,school,class,quantity from tableA 

我希望枢轴基于类,如下表所示:

country City    School  ClassA  ClassB  ClassC  ClassD
XXX AAA SCH01   37  37  39  37
XXX BBB SCH02   12  12  1   12
XXX BBB SCH03   6   6   9   6
XXX DDD SCH04   1   1   1   1
YYY ABC SCH05   1   1   1   1
YYY CDE SCH06   1   1   1   1
YYY EDY SCH07   1   1   1   1
YYY ZER SCH08   1   1   1   1
SSS GFY SCH09   1   1   1   1
SSS AHY SCH10   1   1   1   1

1 个答案:

答案 0 :(得分:0)

MS SQL SERVER:

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME([class]) 
                    from [table-name]
                    group by [class]
                    order by [class]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT [country], [city], [school],' + @cols + ' from 
             (
                select [country], [city], [school],[class],[quantity]
                from [table-name]
            ) x
            pivot 
            (
                sum([quantity])
                for [class] in (' + @cols + ')
            ) p '

execute(@query);