需要编码以基于先前值跳过一行查询

时间:2016-01-11 21:39:01

标签: sql db2

在下面的代码中,我们遇到一个问题,当行是一个专栏行,但没有LC然后缺少LC会消除这部分显示的数量:

CASE WHEN lctype='RO' THEN ROUND(SUM(totalland.olrqty),2) ELSE 0  
                  END NAME(roytotal) COLHDG("Royalties") LEN(11,2),

如果LCTYPE =" RO"我将如何编码?如果它的=' LC'那么请不要检查下一行。 ?正如这里发生的那样,这个列totalland / olrqty)在LC时会变为零,但如果之前是RO,我们不想归零。

SELECT   olsrom, olorno, olline, olprdc, oldesc,                             
            olrqty COLHDG("Qty Rec") LEN(11,0), WDATA(lctype),                
            SUM(olamou.olrqty) LEN(11,2) NAME(unit) COLHDG("Unit Price"),     
            CASE WHEN lctype='RO' THEN ROUND(SUM(totalland.olrqty),2) ELSE 0  
              END NAME(roytotal) COLHDG("Royalties") LEN(11,2),               
            CASE WHEN lctype='LC' THEN ROUND(SUM(totalland.olrqty),2) ELSE 0  
              END NAME(lctotal) COLHDG("Add-on Cost") LEN(11,2),              
            (roytotal+lctotal+unit) COLHDG("Landed Cost") NAME(totallc)       
              LEN(11,2)                                             

1 个答案:

答案 0 :(得分:1)

您可以使用LAG功能检查上一行中的值。

编辑(如果ParFait是对的):

只需添加...

OR lctype = 'RO'

...到下一行:

CASE WHEN lctype='LC' OR lctype = 'RO'
THEN ROUND(SUM(totalland.olrqty),2)
ELSE 0
END NAME(lctotal) COLHDG("Add-on Cost") LEN(11,2),