大家好 -
ID TOTAL QTY
111 NULL 100
112 NULL 150
113 312.00 70
114 NULL 200
115 14.00 40
116 NULL 70
117 NULL 100
118 NULL 170
我试图使用Teradata来解决相对复杂的问题。在上面的数据中,我想创建一个名为THREEDAY的新列。如果TOTAL为null,那么我希望THREEDAY等于QTY中的金额。但是,如果TOTAL不为null,我希望TOTAL等于QTY 加中的数量,以用于以下两行的QTY数量。例如:
ID TOTAL QTY THREEDAY
111 NULL 100 100
112 NULL 150 150
113 312.00 70 310
114 NULL 200 200
115 14.00 40 210
116 NULL 70 70
117 NULL 100 100
118 NULL 170 170
对于ID 113,THREEDAY中的金额为310(70 + 200 + 40),而对于ID 115,金额为210(40 + 70 + 100)。对于其余的ID,THREEDAY中的金额等于QTY,因为缺少TOTAL中的值。
我的技能无法解决这类问题,所以任何帮助都会很棒。谢谢!
答案 0 :(得分:0)
您可以使用窗口函数sum()
来执行此操作。该解决方案假定订购基于id
列。 (此解决方案适用于SQL Server。我认为这也适用于Teradata,如果不能,则需要更改语法)
select id,total,quantity,
case when total is null then quantity
else sum(coalesce(quantity,0)) over(order by id rows between current row and 2 following)
end threeday
from tablename