我有一个 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 有两种方法可以做到这一点,一种是您对要转换的列进行编码的静态 Pivot,另一种是在执行时确定列的动态 Pivot。
静态枢轴:
SELECT *
FROM
(
SELECT col1, col2
FROM yourTable
) x
PIVOT
(
min(col2)
for col1 in ([A], [B], [C])
)p
动态枢轴:
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
语句执行类似类型的查询:
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 中使用PIVOT
or COALESCE
。这是一个很好的示例,如何将行转换为列。
将行转换为列的五种方法
.