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)
您可以通过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)
两个版本都会给出相同的结果.当你有一个未知数量的列将被转换时,第二个工作.
| 归档时间: |
|
| 查看次数: |
5639 次 |
| 最近记录: |