我有一个SQL查询“ Select * from tablename”,其输出是
col1 col2 A 1 B 2 C 3
我想将上面的输出修改为如下
A B C 1 2 3
请让我知道我怎么能做到这一点
您将需要执行PIVOT。使用PIVOT有两种方法可以执行此操作,一种是静态列,您在其中编码要转换的列,另一种是动态轴,它确定执行时的列。
PIVOT
静态枢轴:
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)
如果您不想使用该PIVOT函数,则可以使用以下CASE语句执行类似的查询:
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