【问题标题】:How to transform columns and rows?如何转换列和行?
【发布时间】:2019-06-27 02:18:34
【问题描述】:

我无法将一列转换为多列,也无法将多列转换为行。

解释自己的最佳方式是使用表格:

【问题讨论】:

    标签: sql sql-server pivot pivot-table


    【解决方案1】:

    您可以使用 SQL Server 中的 UNPIVOTPIVOT 函数来转置行和列,以下查询应该可以满足您的要求:

    CREATE TABLE #temp (Category VARCHAR(10), [% SKU] INT, [% Aveg Inv] INT, [% Inv Val] INT, [% Shipped Cases] INT, [% Inv Cub] INT, [% Sales] INT)
    
    INSERT INTO #temp VALUES
    ('Type1',10,4,4,14,0,7),
    ('Type2',82,30,30,30,0,68),
    ('Type3',3,1,1,0,0,0),
    ('Type4',6,65,65,56,0,24)
    
    
    SELECT pvt.* FROM
    (
    SELECT [Category], [Value], [Driver]
    FROM #temp t
    UNPIVOT (Value FOR Driver IN ([% SKU],[% Aveg Inv],[% Inv Val],[% Shipped Cases],[% Inv Cub],[% Sales])) a) unpvt
    
    PIVOT (SUM([Value]) FOR [Category] IN ([Type1],[Type2],[Type3],[Type4])) pvt
    
    ORDER BY CASE Driver
                WHEN '% SKU' THEN 1
                WHEN '% Aveg Inv' THEN 2
                WHEN '% Inv Val' THEN 3
                WHEN '% Shipped Cases' THEN 4
                WHEN '% Inv Cub' THEN 5
                WHEN '% Sales' THEN 6 END
    

    结果如下,

    Driver          Type1   Type2   Type3   Type4
    % Aveg Inv      4       30      1       65
    % Inv Cub       0       0       0       0
    % Inv Val       4       30      1       65
    % Sales         7       68      0       24
    % Shipped Cases 14      30      0       56
    % SKU           10      82      3       6
    

    【讨论】:

    • 有没有办法让最终结果的驱动列具有与以下相同的顺序: UNPIVOT (Value FOR Driver IN ([% SKU],[% Aveg Inv],[% Inv Val],[% Shipished Case],[% Inv Cub],[% Sales])) a) unpvt ?
    • @batman 你可以使用order by 子句,请参考更新后的代码
    • 谢谢。还有其他方法可以直接在 unpivot sintax 中排序吗?
    • 它不会为您订购。您需要使用 ORDER BY。
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2013-10-01
    • 2015-11-10
    • 1970-01-01
    • 2013-06-12
    • 2011-12-21
    相关资源
    最近更新 更多