Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MSSQL中将行数据转换为列?_Sql_Sql Server_Pivot - Fatal编程技术网

如何在MSSQL中将行数据转换为列?

如何在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

我有一个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   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检查我的答案,如果对您有帮助,请选择它作为正确答案。