2014-11-03 56 views
0

我試圖在SQL查詢中使用IF ELSE語句,因爲我想根據每個PLN#的包大小對每個區的單元求和。我可以這樣做嗎?這裏是我的嘗試,這是不行的:在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'子句中試圖做什麼。你想比較這些數額?你想「選擇」他們嗎?還有別的嗎? – 2014-11-03 20:33:32

+0

謝謝,我不知道。我不想比較任何東西。我希望任何PLN#= 40000683181然後將單位總和除以25,任何其他PLN#不等於後者應該有單位的總和除以60 ...我可以用一個案例來做到這一點嗎?如果是這樣,怎麼樣? – SQUISH 2014-11-03 20:39:15

+0

所以,你想在'SELECT'列表中進行這個計算嗎?不在'WHERE'子句中? – 2014-11-03 20:42:52

回答

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 2014-11-03 21:09:16

0

在Oracle 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 2014-11-03 20:42:11