2014-02-11 4 views
3

대답 GORDONS에 따르면 다음 출력을 얻기 위해 쿼리를 구현했습니다.SQL에서 case가있는 조건

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에서 계산 예에 참여 행을 원하는 다음과 같이

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 

내 쿼리입니다 ~ 3까지만 값과 계산에 참여하지 않는 모든 행을 NULL로 만들 수 있습니다. 세 번째 행에서 알 수 있듯이 값은 (4-6 = -2)입니다. 값이 음수이더라도 행은 값 "20"의 일부입니다. 따라서 값은 -2 또는 NULL 대신 0으로 설정됩니다. 조건을 (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에 게시한다. 쿼리를 약간 개선하면 문제가 해결됩니다. 도와주세요. 감사 –