【问题标题】:TSQL Pivot 4 value columnsTSQL Pivot 4 值列
【发布时间】:2018-11-08 05:57:34
【问题描述】:

在 SQL Server 2008 中,我尝试使用 Period 列将下面的表格格式“透视”为宽格式(在实际数据中,有 5 个不同的 Period)。

我已搜索但尚未找到解决方案。我提到了https://www.tangrainc.com/blog/2009/01/pivoting-on-multiple-columns/#comment-504,但无法将逻辑转换为 >2 值列 - 这是我需要的。

有什么想法吗?您可能已经猜到我不是 SQL 专家。使用 SQL Server 2008。

谢谢, 克里斯

ps。第一个 S/O 帖子!

试图从平桌上获得:

到一张宽桌子:

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql pivot


    【解决方案1】:

    你可以使用条件聚合:

    select Cat, Dept,
           sum(case when Period = 'LW' then New else 0 end) as [Net LW],
           sum(case when Period = 'LY' then New else 0 end) as [Net LY],
           sum(case when Period = 'LW' then Gross else 0 end) as [Gross LW],
           sum(case when Period = 'LY' then Gross else 0 end) as [Gross LY],
           sum(case when Period = 'LW' then Profit else 0 end) as [Profit LW],
           sum(case when Period = 'LY' then Profit else 0 end) as [Profit LY],
           sum(case when Period = 'LW' then Units else 0 end) as [Units LW],
           sum(case when Period = 'LY' then Units else 0 end) as [Units LY]
    from table t
    group by Cat, Dept; 
    

    【讨论】:

    • 啊,真的这么简单吗?!谢谢 Yogesh - 我现在就试一试,如果有任何问题,我会回来。
    • 唯一需要注意的是空聚合。可能需要在 case 语句中添加 else 0 以确保 DB 中的 NULL 设置不会影响您的计算。大多数情况下这不会发生,但安全总比后悔好
    • @SFrejofsky。 . .这很重要,我忘记了。
    猜你喜欢
    • 2013-11-04
    • 2012-06-20
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多