You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SELECT CASE将多行数据按DocNumber合并为单行?

解决方案

要实现按DocNumber分组并将对应PaymentId的金额映射到指定列的单行结果,你需要用GROUP BY对分组字段聚合,配合聚合函数提取每个分组中对应列的有效值。

修正后的SQL语句

SELECT 
    P.DocNumber,
    MAX(P.DocType) AS DocType, -- 同一DocNumber下DocType一致,用MAX提取
    MAX(CASE WHEN P.PaymentId = '01' THEN P.Amount END) AS Cash,
    MAX(CASE WHEN P.PaymentId = '02' THEN P.Amount END) AS Debit,
    MAX(CASE WHEN P.PaymentId = '03' THEN P.Amount END) AS Credit
FROM PaymentsTable AS P
GROUP BY P.DocNumber;

关键说明

  • GROUP BY P.DocNumber:将数据按DocNumber分组,确保每个DocNumber仅返回一行结果。
  • MAX(CASE ...):每个分组内,对应PaymentId的CASE表达式会生成一个有效值和其他NULL值,MAX函数会自动忽略NULL,保留唯一的有效值。
  • MAX(P.DocType):由于同一DocNumber下的DocType完全相同,用MAX可稳定提取该值(也可直接将DocType加入GROUP BY子句)。

期望结果

DocNumberDocTypeCashDebitCredit
2020Receipt100.00150.0010.00
600Order1500.00NULLNULL
220Invoice650.00500.00NULL

内容的提问来源于stack exchange,提问作者Roy Givenchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:30:57