我有一张如下表格
Cstmr_ID | PPM | prepaid |home_phone|srvc_num
1 |Y |N |N |0422222222
1 |Y |N |N |0433333333
1 |N |N |Y |0333333333
2 |y |N |N |0455555555
2 |N |N |Y |0355555555
现在我想要一张这样的桌子。
Cstmr_id | PPM_srvc_num |prepaid_srvc_num|home_phone_srvc_num
1 |0422222222,0433333333 | |0333333333
2 |0455555555 | |0355555555
答案 0 :(得分:0)
您要做的是转置您的表,然后对连接记录进行分组。由于Teradata 14.10有TD_UNPIVOT功能可以转置,但我还没有使用它。
如果您可以在数字中使用固定的上限(N),则结果中的一个Cstmr_id的相同列可以使用case语句和row_number()来模拟转置和组连接。
select Cstmr_id
, max(case when PPM='Y' and rn=1 then srvc_num else null end)
|| coalesce(max(case when PPM='Y' and rn=2 then ','||srvc_num else null end),'')
...
|| coalesce(max(case when PPM='Y' and rn=N then ','||srvc_num else null end),'')
as PPM_srvc_num
-- add the further lines for prepaid ='Y' and home_phone='Y'
from (
select *
, row_number() over (partition by Cstmr_ID, PPM, prepaid, home_phone) as rn
from your_table
) dt
group by 1
我还没有对上面的代码进行过测试,但实际上我已经为自己完成了这种类型的转换,所以它应该在完全写出你的执行表之后才能工作