如何在MSSQL中将行数据转换为列?
我有一个SQL查询,它返回这样的行数据如何在MSSQL中将行数据转换为列?,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一个SQL查询,它返回这样的行数据 name1 aa 12 name1 bb 32 name2 aa 21 name3 aa 11 name3 bb 23 name3 cc 22 aa bb cc name1 12 32 0 name2 21 0 0 name3 11 23 22 然后想把它格式化成这样 name1 aa 12 name1 bb 32 name2 aa 21 name3
name1 aa 12
name1 bb 32
name2 aa 21
name3 aa 11
name3 bb 23
name3 cc 22
aa bb cc
name1 12 32 0
name2 21 0 0
name3 11 23 22
然后想把它格式化成这样
name1 aa 12
name1 bb 32
name2 aa 21
name3 aa 11
name3 bb 23
name3 cc 22
aa bb cc
name1 12 32 0
name2 21 0 0
name3 11 23 22
列结果是动态的,我不能对它们使用联接。您应该使用
PIVOT
CREATE TABLE #Temp2 (
Col1 VARCHAR(10),
Col2 NVARCHAR(40),
Col3 INT
);
INSERT INTO #Temp2 (Col1, Col2, Col3)
VALUES ('name1', 'aa', 12),
('name1', 'bb', 32),
('name2', 'aa', 21),
('name3', 'aa', 11),
('name3', 'bb', 23),
('name3', 'cc', 22);
SELECT Col1,
ISNULL([aa], 0) as aa,
ISNULL([bb], 0) as bb,
ISNULL([cc], 0) as cc
FROM #Temp2
PIVOT
(
MIN(col3)
FOR col2 IN ([aa], [bb], [cc])
) as pvt
DROP TABLE #Temp2
输出
Col1 aa bb cc
name1 12 32 0
name2 21 0 0
name3 11 23 22
以下
PIVOT
查询按预期工作
DECLARE @table TABLE(name VARCHAR(40), id VARCHAR(10), total INT)
INSERT INTO @table
SELECT 'name1','aa', 12 UNION
SELECT 'name1','bb', 32 UNION
SELECT 'name2','aa', 21 UNION
SELECT 'name3','aa', 11 UNION
SELECT 'name3','bb', 23 UNION
SELECT 'name3','cc', 22
SELECT name,
ISNULL([aa], 0) AS [aa],
ISNULL([bb], 0) AS [bb],
ISNULL([cc], 0) AS [cc]
FROM @table
PIVOT(
SUM(total)
FOR id IN ([aa], [bb], [cc])
) AS pivTab
将您的查询放在此处。。。并尝试使用
pivot
Arnes检查我的答案,如果对您有帮助,请选择它作为正确答案。