【问题标题】:SQL Server : grouping 2 columns in same rowSQL Server:在同一行中分组 2 列
【发布时间】:2019-12-10 15:37:11
【问题描述】:

我有这个问题

select 
    Id,
    case when isThirdParty = 0 then sum(total) end as FirstPartyFees,
    case when isThirdParty = 1 then sum(total) end as ThirdPartyFees
from 
    MyTable
group by 
    id, isThirdParty

我得到了这个结果

Id                                    FirstPartyFees                          ThirdPartyFees
------------------------------------ --------------------------------------- ---------------------------------------
DA29BDC0-BE3F-4193-BFDC-493B354CE368 15.00                                   0.00
2EF0B590-FE4F-42E8-8426-5864A739C16B 5.00                                    0.00
246DC3D8-732F-4AE3-99F3-BDEBF98F7719 15.00                                   0.00
FC81F220-ED54-48FE-AE1B-C394492E82A4 5.00                                    0.00
336D9CF1-6970-48BA-90E5-C7889914DDCB 114.00                                  0.00
6F2EEF6F-5FA1-42E5-A988-DB88037DAB92 5.00                                    0.00
80763B37-68E1-4716-B32A-FE82C1700B52 15.00                                   0.00
DA29BDC0-BE3F-4193-BFDC-493B354CE368 0.00                                    1.00
2EF0B590-FE4F-42E8-8426-5864A739C16B 0.00                                    1.00
246DC3D8-732F-4AE3-99F3-BDEBF98F7719 0.00                                    1.00
FC81F220-ED54-48FE-AE1B-C394492E82A4 0.00                                    1.00
336D9CF1-6970-48BA-90E5-C7889914DDCB 0.00                                    0.00
6F2EEF6F-5FA1-42E5-A988-DB88037DAB92 0.00                                    1.00
80763B37-68E1-4716-B32A-FE82C1700B52 0.00                                    1.00

如您所见,我得到了第一方和第三方的副本。如何将同一 ID 的第一方和第三方总计分组在 1 行中?

【问题讨论】:

    标签: sql sql-server tsql group-by pivot


    【解决方案1】:

    您正在寻找条件聚合。

    您应该将case 表达式移到sum() 中,并从group by 子句中删除isThirdParty

    SELECT Id,
        SUM(CASE WHEN isThirdParty = 0 THEN total END) AS FirstPartyFees,
        SUM(CASE WHEN isThirdParty = 1 THEN total END) AS ThirdPartyFees
    FROm MyTable
    GROUP BY id
    

    【讨论】:

    • 你得到了如此快速的答案的支持。我迟到了 30 秒:-(
    • @TimBiegeleisen:谢谢...我从您和其他 SQL 专家那里学到了艰难的方法,即速度在这里非常重要...
    【解决方案2】:

    因为isThirdParty是一个指标,你也可以只用数学:

    select Id, SUM(total * (1 - isThirdParty)) as FirstPartyFees,
       SUM(total * isThirdParty) as ThirdPartyFees
    frOm MyTable
    group by id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多