Teradata:如果field不为null,则将下一行特定列添加到total

时间:2016-08-11 13:45:45

标签: sql grouping teradata

大家好 -

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中的值。

我的技能无法解决这类问题,所以任何帮助都会很棒。谢谢!

1 个答案:

答案 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

Sample example