zkzwzd
576
2021-04-14 14:39:18
4
109

오라클 쿼리 백분율 분모 0 일 때.



SELECT
 ROUND(NVL(SUM(A.AMT),0) / (SELECT AMT_TOT FROM TOTAL)*100) AS 1,
TO_CHAR(NVL(SUM(A.AMT),0),'999,999,999,999,999') AS 2,
(100-ROUND(SUM(A.AMT) / (SELECT AMT_TOT FROM TOTAL)*100)) AS 3
TO_CHAR((SELECT AMT_TOT FROM TOTAL) - SUM(A.AMT), '999,999,999,999,999') AS 4
이런 select문이 있습니다. 헌데 분모가 0이 되어서 divide by zero error가 나오는데 어떻게 해결을 애햐할까요?
decode를 쓰면 null값이 0으로 들어오지 않습니다.
-2
0
  • 답변 4

  • 콘푸로스트
    1k
    2021-04-14 14:53:01

    CASE를 쓰시면 될 것 같습니다.


    SELECT
    	CASE 
    	  WHEN (SELECT AMT_TOT FROM TOTAL) != 0
    	  THEN ROUND(NVL(SUM(A.AMT),0) / (SELECT AMT_TOT FROM TOTAL)*100)
    	  ELSE 0
    	END AS TEST
    FROM DUAL 


  • zkzwzd
    576
    2021-04-14 14:58:23

    콘푸로스트

    저 4개 셀렉트가 그렇게 변환이 된건가요 ???

  • 로를리앙
    155
    2021-04-14 14:58:46

    nvl ??

    -1
  • 콘푸로스트
    1k
    2021-04-14 15:18:04

    dzhzKz  님//

    아닙니다. 예시로 든 소스입니다.

    case 문으로 0값을 확인하시고, 0이거나 null이면 '0'을 반환하는 식으로 작업하시면 될 것 같습니다.


  • 로그인을 하시면 답변을 등록할 수 있습니다.