想象一下,我有这张桌子:
Column A | Column B | Column C ------------------------------ 111 X 10 111 Y 12
我如何查询该表以显示如下结果:
Column A | X | Y ----------------------------------- 111 10 12
您可以通过PIVOT执行此操作。您可以使用知道要旋转的列数的静态PIVOT,也可以使用动态PIVOT
静态数据透视表(请参阅带有演示的SQL Fiddle)
SELECT * FROM ( select * from t1 ) x pivot ( min(columnc) for columnb in ([X], [Y]) ) p
Dynamic Pivot(请参阅带有演示的SQL Fiddle)
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); select @cols = STUFF((SELECT distinct ',' + QUOTENAME(columnb) from t1 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT columna, ' + @cols + ' from ( select * from t1 ) x pivot ( min(ColumnC) for ColumnB in (' + @cols + ') ) p ' execute(@query)
这两个版本将提供相同的结果。当您要转换的列数未知时,第二个方法起作用。