【问题标题】:Convert rows into columns more than 2 columns SQL Server将行转换为多于 2 列的列 SQL Server
【发布时间】:2016-10-24 09:35:02
【问题描述】:

我想使用数据透视将行转换为列。如果它只有两列,我们可以这样做。如果表格超过 2 列,我们是否可以进行旋转?

例如:

    C1  C2      C3
________________________ 
    A   10      1000
    B   20      1000 
    C   30      1500

预期输出:

A         B        C
10        20       30
1000      1000     1500 

【问题讨论】:

标签: sql-server pivot


【解决方案1】:

这是我发现的一种方法,即使您可以尝试使用一个枢轴而不是使用复杂的 cte

WITH cte
         AS (SELECT Max(a) a,
                    Max(b) b,
                    Max(c) c
             FROM   (SELECT *
                     FROM   #Table1)a
                    PIVOT ( Avg(c2)
                          FOR c1 IN (a,
                                     b,
                                     c) ) AS c),
         c2
         AS (SELECT Max(a) a,
                    Max(b) b,
                    Max(c) c
             FROM   (SELECT *
                     FROM   #Table1)a
                    PIVOT ( Avg(c3)
                          FOR c1 IN (a,
                                     b,
                                     c) ) AS c3) SELECT *
    FROM   cte
    UNION ALL
    SELECT *
    FROM   c2 

【讨论】:

    【解决方案2】:

    这是使用 PIVOT 和表值构造函数的简单方法

    CREATE TABLE myTable
        ([C1] varchar(1), [C2] int, [C3] int)
    ;
    
    INSERT INTO myTable
        ([C1], [C2], [C3])
    VALUES
        ('A', 10, 1000),
        ('B', 20, 1000),
        ('C', 30, 1500)
    ;
    
    
    SELECT  [A],[B],[C] 
    FROM    (
            SELECT  ca.*
            FROM    myTable mt
                    CROSS APPLY (VALUES(mt.C1, 1, mt.C2),(mt.C1, 2, mt.C3)) ca(col, rn, val)
            ) t
    PIVOT (
        MAX(val)
        FOR col IN ([A],[B],[C])
    ) p
    

    交叉应用将为每一列创建一个新行 (C2, C3) col 是 C1 值 (A,B,C) rn 只是用于分隔值的 RowNumber 值,因此 PIVOT 不会将它们组合起来,然后选择 MAX,val 只是 C2 和 C3 值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2010-10-22
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多