2014-11-03 3 views
0

각 PLN #마다 패키지 크기에 따라 지구별 단위를 합산하기 때문에 SQL 문의 IF ELSE 문을 사용하려고합니다. 내가 할 수 있을까?Oracle SQL에서 IF 문 사용

 SELECT district_nbr,PLN_NBR, SUM(A.LO_IOH_UNITS) AS TOTAL_UNITS, SUM (A.LO_IOH_EXT_COST_DLRS) AS TOTAL_DOLLARS 
FROM FCT_LOIOH_DAY_STR_PLN A, DIM_PROD_PLN B, DIM_LOCATION C 
WHERE B.PLN_NBR IN(40000683181, 40000418723, 40000335776) 
AND A.PROD_ID = B.PROD_ID 
AND A.LOC_ID = C.LOC_ID 
if PLN_NBR = '40000683181' then SUM(A.LO_IOH_UNITS)/25 
else SUM(A.LO_IOH_UNITS)/60 

GROUP BY district_nbr,PLN_NBR 
+0

SQL에서 'IF'문은 PL/SQL에서만 사용할 수 없습니다. SQL에서 CASE 문을 사용할 수 있습니다. 하지만'IF' 문이 WHERE 절에서 무엇을하려고하는지 알 수 없습니다. 그 합계를 무언가와 비교하고 싶습니까? 그들을 '선택'하시겠습니까? 다른 것? –

+0

고마워, 나는 그걸 몰랐다. 나는 아무것도 비교하려고하지 않는다. 나는 어떤 PLN # = 40000683181에 25 단위로 나누는 단위의 합계를 갖기를 원한다. 다른 PLN #은 후자와 같지 않은 단위의 합계를 60으로 나눈 값이어야한다. 나는이 경우를 할 수 있을까? 그렇다면 어떻게? – SQUISH

+0

그래서이 계산을'SELECT'리스트에 넣으시겠습니까? WHERE 절에 있지 않습니까? –

답변

0
SELECT district_nbr, PLN_NBR, 
     SUM(A.LO_IOH_UNITS)/(case when PLN_NBR = 40000683181 then 25 else 60 end) AS TOTAL_UNITS, 
     SUM (A.LO_IOH_EXT_COST_DLRS) AS TOTAL_DOLLARS 
FROM FCT_LOIOH_DAY_STR_PLN A, 
    DIM_PROD_PLN B, 
    DIM_LOCATION C 
WHERE B.PLN_NBR IN (40000683181, 40000418723, 40000335776) 
    AND A.PROD_ID = B.PROD_ID 
    AND A.LOC_ID = C.LOC_ID 
GROUP BY district_nbr, PLN_NBR; 
+0

환상적입니다! 이 위대한, 고마워! – SQUISH

0

오라클 SQL에서, 당신은 조건문 CASE WHEN ... ELSE를 사용할 수 있습니다 :

CASE WHEN PLN_NBR = '40000683181' THEN SUM(A.LO_IOH_UNITS)/25 
            ELSE SUM)A.LO_IOH_UNITS)/60 
END 

이러한 CASE WHEN ... 문이 다른 선택된 열이 이동 부분으로 이동 : 여기 내 작동하지 않습니다 시도이다

SELECT 
    foo, 
    bar, 
    CASE .... 
FROM 
    ... 
+0

선택 문의 나머지 부분은 어디에 있습니까? 나는 이것을 가지고 IF로 바꾸려고했지만 "SQL 명령이 제대로 끝나지 않았다"고 여전히 말합니다. – SQUISH