2014-02-11 70 views
3

根據GORDONS答案我實現了查詢以獲得以下輸出。SQL中的CASE條件

ROW_ID  ARTIKEL  SUPPLIERID  ORGID  PIECES  COSTPRICE  DISCOUNT VALUE_DRILL_DOWN 
1   TV   SONY   922   6   110   2.5   14 
2   TV   SONY   922   10   80   1   4 
3   TV   SONY   922   6   65   1.5   0 
4   TV   SONY   922   14   95   1.5   0 
5   TV   SONY   922   18   95   1.5   0 
6   TV   SONY   922   4   95   1.5   0 

我的查詢如下:

SELECT "SUPPLIERID","ARTIKEL",(case when @x - "cumlativesum") < 0 then NULL else (@x - "cumlativesum") end) as "VALUE_DRILL_DOWN" 
from 
(SELECT T1."ARTIKEL",T1."SUPPLIERID",(select sum("PIECES") from EXAMPLE_TABLE T2 where T2."ROW_ID" <= T1."ROW_ID"and T2."SUPPLIERID" = T1."SUPPLIERID" and T2."ARTIKEL"=T1."ARTIKEL") as "cumlativesum" from :EXAMPLE_TABLE T1) 

但我想以這樣的方式輸出:

ROW_ID  ARTIKEL  SUPPLIERID  ORGID  PIECES  COSTPRICE  DISCOUNT VALUE_DRILL_DOWN 
1   TV   SONY   922   6   110   2.5   14 
2   TV   SONY   922   10   80   1   4 
3   TV   SONY   922   6   65   1.5   0 
4   TV   SONY   922   14   95   1.5   Null 
5   TV   SONY   922   18   95   1.5   Null 
6   TV   SONY   922   4   95   1.5   Null 

我想要的參加計算,即從行1的行到3只有值和所有不參與計算的行都是NULL。 正如我們在第三行所看到的,值是(4-6 = -2)。即使該值爲負值,該行也是值「20」的一部分。因此,該值設置爲0而不是-2NULL。 如果將條件更改爲(case when @x - "cumlativesum") < 0 then NULL,則值超出0的所有行都將設置爲NULL。

任何建議,將不勝感激。

回答

2

您可以通過查找第一次累積總數通過/達到0的記錄來獲得所需的數據。你可以通過減去你正在積累的值來做到這一點。我認爲查詢看起來像:

SELECT "SUPPLIERID", "ARTIKEL", 
     (case when @x - cumulativesum <= 0 and @x - (cumulativesum -BZBAS_AW) > 0 
      then 0 
      when @x - "cumulativesum" <= 0 
      then NULL 
      else @x - "cumulativesum" 
     end) as "VALUE_DRILL_DOWN" 
from (SELECT T1."ARTIKEL", T1."SUPPLIERID", T1.BZBAS_AW 
      (select sum("BZBAS_AW") 
       from EXAMPLE_TABLE T2 
       where T2."ROW_TEST" <= T1."ROW_TEST" and T2."LIFNR" = T1."LIFNR" and T2."ARTIKEL"=T1."ARTIKEL" 
      ) as "cumulativesum" 
    from EXAMPLE_TABLE T1 
    ) t 
+0

非常感謝。這嚴重影響了我的想法。你節省了我的一天。非常感謝。 CHeers :) –

+0

嘿戈登,你的支持到現在一直是巨大的。不過,我想問你最後一個忙。我只是發佈這個問題http://stackoverflow.com/questions/21727215/nested-case-in-sql。查詢的一個小增強將解決我的問題。請幫忙。謝謝 –