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

如何在Teradata SQL Assistant中通过GROUP BY合并多行结果为单行?

问题:如何修改Teradata SQL查询实现行转列合并结果?

原查询语句:

sel SOLD_ACCTBL_DOC_ID,prim_SOLD_ACCTBL_DOC_ID,
        case when CPN_NUMBER=1 then cpn_number else '' end as CPN_NUMB_1,
        case when CPN_NUMBER=2 then cpn_number else '' end as CPN_NUMB_2
        from adqmf.QLZ0202_SOLD_ACCTBL_DOC_CPN where SOLD_ACCTBL_DOC_ID=1441243
        group by 1,2,3,4

原查询结果:

SOLD_ACCTBL_DOC_ID  PRIM_SOLD_ACCTBL_DOC_ID  CPN_NUMB_1      CPN_NUMB_2
1,441,243            1,441,243                  1              
1,441,243            1,441,243                                    2

期望结果:

SOLD_ACCTBL_DOC_ID   PRIM_SOLD_ACCTBL_DOC_ID   CPN_NUMB_1    CPN_NUMB_2
1,441,243               1,441,243                  1              2

修改方案

对case表达式的结果使用聚合函数(比如MAX),同时调整group by子句仅按前两列分组,即可合并同一文档ID下的不同CPN编号到同一行:

sel SOLD_ACCTBL_DOC_ID, prim_SOLD_ACCTBL_DOC_ID,
    MAX(case when CPN_NUMBER=1 then cpn_number else '' end) as CPN_NUMB_1,
    MAX(case when CPN_NUMBER=2 then cpn_number else '' end) as CPN_NUMB_2
from adqmf.QLZ0202_SOLD_ACCTBL_DOC_CPN 
where SOLD_ACCTBL_DOC_ID=1441243
group by 1,2

原理说明

  • 原查询的group by包含了CPN_NUMB_1和CPN_NUMB_2,这两个列在不同行中值互斥(一行有值另一行空),因此会生成两行结果。
  • 使用MAX聚合后,同一分组(相同的SOLD_ACCTBL_DOC_ID和PRIM_SOLD_ACCTBL_DOC_ID)会自动取到非空的CPN编号值,从而合并为一行。

内容的提问来源于stack exchange,提问作者revathy jansi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:07:40