根据GORDONS回答,我实现了查询以获得以下输出。
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
而不是-2
或NULL
。
如果我将条件更改为(case when @x - "cumlativesum") < 0 then NULL
,则值超出0
的所有行都将设置为NULL。
任何建议都将不胜感激。
答案 0 :(得分: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