出力が次のSQLクエリ「Select * from tablename」があります
col1 col2
A 1
B 2
C 3
上記の出力を次のように変更したい
A B C
1 2 3
どうすればこれを達成できるか教えてください
出力が次のSQLクエリ「Select * from tablename」があります
col1 col2
A 1
B 2
C 3
上記の出力を次のように変更したい
A B C
1 2 3
どうすればこれを達成できるか教えてください
を実行する必要がありますPIVOT
。PIVOT でこれを行うには 2 つの方法があります。変換する列をコーディングする静的ピボットか、実行時に列を決定する動的ピボットのいずれかです。
静的ピボット:
SELECT *
FROM
(
SELECT col1, col2
FROM yourTable
) x
PIVOT
(
min(col2)
for col1 in ([A], [B], [C])
)p
デモで SQL Fiddle を参照してください
動的ピボット:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1)
from t1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ' + @cols + ' from
(
select col1, col2
from t1
) x
pivot
(
min(col2)
for col1 in (' + @cols + ')
) p '
execute(@query)
デモで SQL Fiddle を参照してください
関数を使用したくない場合は、ステートメントPIVOT
を使用して同様のタイプのクエリを実行できます。CASE
select
SUM(CASE WHEN col1 = 'A' THEN col2 END) as A,
SUM(CASE WHEN col1 = 'B' THEN col2 END) as B,
SUM(CASE WHEN col1 = 'C' THEN col2 END) as C
FROM t1
デモで SQL Fiddle を参照してください