【问题标题】:Combining columns in a complex pivot组合复杂数据透视表中的列
【发布时间】:2020-07-06 14:44:02
【问题描述】:

我有这张桌子:

输入

我希望将其转换为另一个表,其中包含

  • Date/Id/Order 列(主键列)
  • TotalCount 列,包含所有 Cond 列均为 NULL 的原始表的 Count 列的值
  • 每个 CondX 列都有一个 Count 列,包含原始表的 Count 列的值,其中 CondX = 1,其余的 Cond = NULL
  • 非空 (Cond1 OR Cond2 OR Cond3) + (CondA OR CondB) 的每个组合的一个 Count 列,包含原始表的 Count 列的值,其中两个适用的 Cond = 1,其余 = NULL李>

示例:

所以基本上,我希望我的新表有这些列:

  • 日期、ID、订单、总数
  • Cond1Count、Cond2Count、Cond3Count、CondACount、CondBCount
  • Cond1AndCondACount、Cond1AndCondBCount、Cond2AndCondACount、Cond2AndCondBCount...

从示例图像中,我们最终会得到这些值:

期望的输出

(注意:CondBCount = 0 表示 Order = 2,图片版中漏掉了)

如果我有任何 SQL,我会显示一些 SQL,但实际上我不太确定从哪里开始解决这个问题。我可以天真地做一堆不同的SELECT Count WHERE ...,但我想知道是否有更好的解决方案。

【问题讨论】:

    标签: sql sql-server pivot


    【解决方案1】:

    没有你的表结构。您可以使用 sum & values 对多列求和,甚至可以与 CASE 组合使用 示例:

    SELECT *
    FROM (
        SELECT Date, Id, [Order], 
            (SELECT SUM(v) 
           FROM (VALUES (ISNULL(Cond1,0)), (ISNULL(Cond2,0)),...) AS value(v)) Cond1ACount
        FROM YourTable
    ) sub
    GROUP BY Date, Id, [Order]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      相关资源
      最近更新 更多