Teradata - 根据值填充列
Teradata - Populating columns based on values
我正在尝试根据行值填充 table。
来源
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,ONL 的值。所以我正在填充 0。你能帮助我如何在 Teradata 14 中实现这一点吗?
如果已知规则数量,您可以使用 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/rule 可能有多行,您可以切换到 SUM
而不是 MAX
。
我正在尝试根据行值填充 table。
来源
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,ONL 的值。所以我正在填充 0。你能帮助我如何在 Teradata 14 中实现这一点吗?
如果已知规则数量,您可以使用 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/rule 可能有多行,您可以切换到 SUM
而不是 MAX
。