SQL Serverを使用しているため、PIVOT演算子を使用する必要があります。これは、静的PIVOTまたは動的PIVOTのいずれかを介して行うことができます。
静的PIVOTは、回転する必要のある列ごとにコーディングすることを意味します。たくさんの列があるように見えるので、このようにしたいとは思わないでしょう。ただし、コードは次のようになります。
create table t1
(
statno int,
statdate datetime,
statcolumnname varchar(50),
statcolumnvalue int
)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP00-1MA', 17)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP01-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP02-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1MA.MP03-1MA', 18)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP10-1ME', 26)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP11-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-1ME.MP12-1ME', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP08-2MC', 2)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP09-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0A-2MC', 22)
insert into t1 values (1, '4/1/2012 12:15:00', 'MPB-2MC.MP0B-2MC', 22)
select *
from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in ([MPB-1MA.MP00-1MA], [MPB-1MA.MP01-1MA], [MPB-1MA.MP02-1MA])
) p
これは、実際の例を含むSQLフィドルです。
列がたくさんある場合、これは非常に面倒です。したがって、クエリの実行時に回転する列のリストを生成する動的ピボットを使用することもできます。コードは次のとおりです。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.statcolumnname)
FROM t1 c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT statdate, ' + @cols + ' from
(
select statdate, statcolumnname, statcolumnvalue
from t1
) x
pivot
(
min(statcolumnvalue)
for statcolumnname in (' + @cols + ')
) p '
execute(@query)
どちらも同じ結果になります。