如何创建透视查询

Edu*_*tes 3 sql pivot sql-server-2008 pivot-without-aggregate

想象一下,我有这张桌子:

Column A | Column B | Column C
------------------------------
   111         X        10
   111         Y        12
Run Code Online (Sandbox Code Playgroud)

如何查询此表以显示如下结果:

Column A |     X     |      Y
-----------------------------------
   111         10           12
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 7

您可以通过PIVOT执行此操作.你可以使用静态PIVOT,你知道你想要旋转的列数,或者你可以使用动态PIVOT

Static Pivot(参见SQL小提琴演示)

SELECT *
FROM 
(
  select *
  from t1
) x
pivot
(
  min(columnc)
  for columnb in ([X], [Y])
) p
Run Code Online (Sandbox Code Playgroud)

Dynamic Pivot(参见SQL小提琴演示)

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)
Run Code Online (Sandbox Code Playgroud)

两个版本都会给出相同的结果.当你有一个未知数量的列将被转换时,第二个工作.