【问题标题】:Teradata: if field is not null, add next two rows of specific column to totalTeradata:如果字段不为空,则将特定列的下两行添加到总计中
【发布时间】:2016-08-11 22:04:25
【问题描述】:

大家好——

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 为空,那么我希望 THREEDAY 等于 QTY 中的金额。但是,如果 TOTAL 不为空,我希望 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 中的值。

我的技能还没有达到解决这类问题的水平,所以任何帮助都会很棒。谢谢!

【问题讨论】:

  • 请与我们分享您迄今为止所做的尝试以获得适当的帮助。

标签: sql grouping teradata


【解决方案1】:

您可以使用窗口函数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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多