case when 도움요청요!! 0 4 1,445

by 정유석 [Oracle 기초] [2017.06.28 08:21:36]


        case when nvl(sum(EA_A),0)  = 0 then nvl(EA_B,0)
        else nvl(EA_B,0)
        end EA_AB,

date EA_A EA_AB
20170506 42 -42
20170507 42 -84
20170508 42 -126
20170509 0 -126
20170510 0 -112
20170511 0 -82

 

위의 DATA처럼 나오게되는데

제가원하는건 EA_A가 0이면 EA_B도 0으로만 표시되도록 하고 싶은데 어떻게 case when을 하면좋을까요

by lovekod2hj [2017.06.28 08:31:31]

nvl(sum(EA_A),0)를 사용한 경우는 그룹을 사용한 경우로 보입니다.

DATE를 그룹으로 한 것으로 보이는데 THEN 값과 ELSE 값을 그룹함수로 사용하지 않아서 문제가 되었을 겁니다.

case when nvl(sum(EA_A),0)  = 0 then nvl(SUM(EA_B),0)

     else 0 end EA_AB,


by 정유석 [2017.06.28 08:37:01]

흠..그룹화를 하였는데도

EA_A가 0일때 EA_B는 그대로 -를 가져오네요 ㅠ0으로표기되어야하는데


by lovekod2hj [2017.06.28 08:36:34]
SELECT 날짜
     , NVL(SUM(EA_A),0) AS EA_A
     , CASE WHEN NVL(SUM(EA_A),0) = 0 THEN NVL(SUM(EA_B),0)
            ELSE 0 END EA_AB
  FROM (SELECT '20160101' AS 날짜, 1 AS EA_A, -1 EA_B FROM DUAL UNION ALL
        SELECT '20160102' AS 날짜, 0 AS EA_A, -5 EA_B FROM DUAL)
 GROUP BY 날짜

 


by 마농 [2017.06.28 08:49:39]

then 절과 else 절의 값을 다르게 주셔야죠.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입