3

次のテーブルがあるとします。

Column A | Column B | Column C
------------------------------
   111         X        10
   111         Y        12

このテーブルにクエリを実行して、次のような結果を表示するにはどうすればよいですか:

Column A |     X     |      Y
-----------------------------------
   111         10           12
4

2 に答える 2

7

これはPIVOTを介して実行できます。回転する列の数がわかっている静的PIVOTを使用するか、動的PIVOTを使用できます

静的ピボット ( SQL Fiddle with Demoを参照)

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

動的ピボット ( SQL Fiddle with Demoを参照)

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)

どちらのバージョンでも同じ結果が得られます。2 つ目は、変換される列の数が不明な場合に機能します。

于 2012-06-27T16:57:09.893 に答える
3

試す:

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
于 2012-06-27T16:48:37.107 に答える