由于您正在使用 SQL 服务器, 您需要使用 < a href=" http:// msdn. microsoft. com/ en- us/library/ ms 177410%28v=sql. 105%29. aspx" > PIVOT a > 操作员。 您可以通过静态 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
这是"""http://sqlfiddle.com/#!3/75c4b/1>SQL Fiddle ,并举一个实例。
如果您有许多栏目, 这将非常麻烦。 因此您也可以使用一个 < 坚固 > Dynamic Pivit 坚固 >, 这将生成在运行查询时要旋转的列列表 。 以下是代码 :
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)
两者的结果都一样。