想象一下,我有这个表:
Column A | Column B | Column C
------------------------------
111 X 10
111 Y 12
我怎样才能查询该表显示的结果像这样:
Column A | X | Y
-----------------------------------
111 10 12
想象一下,我有这个表:
Column A | Column B | Column C
------------------------------
111 X 10
111 Y 12
我怎样才能查询该表显示的结果像这样:
Column A | X | Y
-----------------------------------
111 10 12
您可以通过执行此PIVOT 。 您可以使用一个静态PIVOT,你知道你要旋转的列数,也可以使用动态PIVOT
静态枢轴(参见SQL拨弄演示 )
SELECT *
FROM
(
select *
from t1
) x
pivot
(
min(columnc)
for columnb in ([X], [Y])
) p
动态透视(参见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)
两个版本都可以得到同样的结果。 当你有一个未知号码将被转化列的第二个作品。
尝试:
DECLARE @tbl TABLE (ColumnA INT, ColumnB CHAR(1), ColumnC INT)
INSERT @tbl VALUES (111, 'X', 10), (111, 'Y', 12)
SELECT *
FROM @tbl
PIVOT
(
MAX(ColumnC) FOR ColumnB IN ([X], [Y])
) pvt