Teradata - 根据值填充列

时间:2016-06-02 16:51:49

标签: sql teradata

我正在尝试根据行值填充表。

来源

Cust_num    Rule    Amt Cnt
1   CHQ 40  2
1   ONL 20  4
2   CHQ 11  1

目标

Cust_Num    CHQ_AMT  CHQ_CNT   ONL_AMT  ONL_CNT
1            40        2         20       4
2            11        1          0       0

假设第一个客户编号为1,它符合两个规则。所以我为这些人填充价值。对于cust num 2,on ONL的值。所以我填充0。你能帮我解决如何在Teradata 14中实现这一目标。

1 个答案:

答案 0 :(得分:2)

如果已知规则数量,您可以使用MAX / CASE:

select Cust_num
   ,max(case when Rule = 'CHQ' then Amt else 0 end) as CHQ_AMT
   ,max(case when Rule = 'CHQ' then Cnt else 0 end) as CHQ_CNT
   ,max(case when Rule = 'ONL' then Amt else 0 end) as ONL_AMT
   ,max(case when Rule = 'ONL' then Cnt else 0 end) as ONL_CNT
from tab
group by 1

如果每个cust_num /规则可能有多行,您可以切换到SUM而不是MAX