如何在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
相关产品推荐
相关产品推荐

