Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
如何在sql中转置表_Sql_Sql Server_Transpose - Fatal编程技术网

如何在sql中转置表

如何在sql中转置表,sql,sql-server,transpose,Sql,Sql Server,Transpose,数据库是SQL Server,我有以下表格: NODE | Param1 | Param2 | Param3 | Param4 | Param5 | ----------------------------------------------------------------------- node1| some value | some value | some value | some value | some value | node2| some

数据库是SQL Server,我有以下表格:

NODE |   Param1   |   Param2   |   Param3   |   Param4   |   Param5   |
-----------------------------------------------------------------------
node1| some value | some value | some value | some value | some value |
node2| some value | some value | some value | some value | some value |
node3| some value | some value | some value | some value | some value |
node4| some value | some value | some value | some value | some value |
我试着把它转换成这样:

PARAM |    node1   |    node2   |    node3   |    node4   |
-----------------------------------------------------------
Param1| some value | some value | some value | some value |
Param2| some value | some value | some value | some value |
Param3| some value | some value | some value | some value |
Param4| some value | some value | some value | some value |
Param5| some value | some value | some value | some value |
我试图使用
PIVOT
,但无法正确使用

如果我使用这个:

SELECT
    * 
FROM
    (SELECT
        NODE ,
        Param1 
    FROM
        My_Table 
    ) TEMP 
PIVOT 
( 
MAX(Param1) FOR NODE IN (node1, node2, node3, node4) 
) PIV

然后它只转置一行

您真的应该尝试修复您的表结构。无论如何,这里有一种使用条件聚合的方法


为什么要从一种糟糕的格式转到另一种糟糕的格式?取消将表拆分为一个表,每个
param
node
?好的,可能正确的方法是先取消拆分表,然后使用pivot
WITH CteUnpivot(node, val, param) AS(
    SELECT node, Param1, 'Param1' FROM tbl UNION ALL
    SELECT node, Param2, 'Param2' FROM tbl UNION ALL
    SELECT node, Param3, 'Param3' FROM tbl UNION ALL
    SELECT node, Param4, 'Param4' FROM tbl UNION ALL
    SELECT node, Param5, 'Param5' FROM tbl
)
SELECT
    param,
    node1 = MAX(CASE WHEN node = 'node1' THEN val END),
    node2 = MAX(CASE WHEN node = 'node2' THEN val END),
    node3 = MAX(CASE WHEN node = 'node3' THEN val END),
    node4 = MAX(CASE WHEN node = 'node4' THEN val END),
    node5 = MAX(CASE WHEN node = 'node5' THEN val END)
FROM CteUnpivot
GROUP BY param