将结果 table 从列更改为行

Changing result table from columns to rows

我有一个 table 结果如下:

Variablename|value|Stringvalue
---------------------------------   
Red            1        'Red'      
Green          8        null     
Purple         8        null     
Violet         3        'Violet'
Blue           2        'Blue'          

现在我想把它转换成:

Red | Green | Purple | Violet | Blue
--------------------------------------
1       8       8        3        2
'Red'  null    null   'Violet'  'Blue'

我对 Pivot 和 Unpivot 很生气,但我似乎无法理解它

如果你真的想要那种格式的输出,你可以做两个枢轴并将它们结合在一起。整数值必须转换为字符数据类型。此外,您还需要确保使用了正确的聚合。我根据示例选择了 SUM 和 MAX,但这可能不是您真正想要的。

CREATE TABLE #MyTest (
    VariableName VARCHAR(25)
    ,Value INT
    ,StringValue VARCHAR(25)
    )

INSERT INTO #MyTest
VALUES (
    'Red',1 ,'Red')
    ,('Green',8,NULL)
    ,('Purple',8,NULL)
    ,('Violet',3,'Violet')
    ,('Blue',2,'Blue')

    SELECT CAST([Red] AS VARCHAR(25)) AS Red
    ,CAST([Green] AS VARCHAR(25)) AS Green
    ,CAST([Purple] AS VARCHAR(25)) AS Purple
    ,CAST([Violet] AS VARCHAR(25)) AS Violet
    ,CAST([Blue] AS VARCHAR(25)) AS Blue
FROM (
    SELECT VariableName
        ,Value
    FROM #MyTest
    ) AS a
PIVOT(SUM(Value) FOR VariableName IN (
            [Red]
            ,[Green]
            ,[Purple]
            ,[Violet]
            ,[Blue]
            )) AS pvt

UNION ALL

SELECT [Red]
    ,[Green]
    ,[Purple]
    ,[Violet]
    ,[Blue]
FROM (
    SELECT VariableName
        ,StringValue
    FROM #MyTest
    ) AS a
PIVOT(MAX(StringValue) FOR VariableName IN (
            [Red]
            ,[Green]
            ,[Purple]
            ,[Violet]
            ,[Blue]
            )) AS pvt