sql - SQL Server:在同一行中分组 2 列
问题描述
我有这个查询
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 行中?
解决方案
您正在寻找条件聚合。
您应该将case
表达式移动到子句中并从子句sum()
中删除。isThirdParty
group by
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
推荐阅读
- python - 如何调整 SVM 的参数以获得更好的训练
- flask - Google Colab - Plotly Dash - 示例 dash 应用程序卡在 Prod 环境中
- c++ - 构建 NFIQ2 时从 'char' 到 'char*' 的无效转换
- javascript - 导入语句是否替换了javascript中的脚本标签?
- javascript - 从字符串中删除除智能引号外的所有非 ASCII 字符
- java - 如何使用 api 流将 bufferedreader 添加到 List
- python - 编写一个函数,该函数接受一个字符串参数并返回一个新字符串,其中包含不在参数字符串中的所有字母
- python - 0到25班的Caesar算法解密的推广
- angular - 如何修复“错误 TS2345:类型的参数”不能分配给“Params$Resources$Scripts$Run”类型的参数
- python - 当数据发布到 django api 时,发生 ConnectionResetError: [Errno 54]