2011-06-01 67 views
1

我堅持這是不工作的一個特定的SQL語句工作一個特定的SQL語句卡住。我一直在解決它,但我得到的錯誤信息很簡單,但我無法修復它。與完全不

但是,我不能使它發揮作用。是一個計算值 -

此查詢的輸出請幫我在寫這滿足了商務大規則

Table name- MED_CLM M 
Different Columns - EXCL_AMT, BILL_CHRG_AMT 

樓內設有商務規則正確的查詢 - 獲取一筆不涵蓋金額中

If M.EXCL_AMT < 0 and M.BILL_CHRG_AMT > 0 use -1*NVL(EXCL_AMT,0), 
else if EXCL_AMT > 0 and BILL_CHRG_AMT < 0 use -1*NVL(EXCL_AMT,0), 
else use NVL(EXCL_AMT,0) 
SELECT SUM(NVL(EXCL_AMT,0)) 
FROM MED_CLM 

我有寫一個SQL查詢,包括上述

每個條件下面我把query.I想我缺少的東西在IF-ELSE語法 -

IF (EXCL_AMT <0 AND BILL_CHg_AMT >0) 

    BEGIN 
     select sum (-1 * NVL(EXCL_AMT,0)) 
     from MED_CLM 
    END 

ELSEIF (EXCL_AMT > 0 and BILL_CHRG_AMT < 0) 

    BEGIN 
     select sum (-1 * NVL(EXCL_AMT,0)) 
     from MED_CLM 
    END 

ELSEIF select SUM(NVL(EXCL_AMT,0)) 
     from MED_CLM 
ENDIF; 
+0

請問如果你改變ELSEIF到否則如果它的工作?如果沒有,你可以發佈錯誤消息嗎? – StevieG 2011-06-01 09:53:10

回答

4

當您嘗試執行時,SQL不支持條件執行SELECT語句。 PL/SQL不過是無關緊要的,因爲測試的值來自您正在查詢的表。

正確的答案是簡單的ANE優雅的(當然,elegantish)CASE()語句查詢的預測:

select sum(
     case 
      when m.excl_amt < 0 and m.bill_chrg_amt > 0 then -1*nvl(m.excl_amt,0) 
      when m.excl_amt > 0 and m.bill_chrg_amt < 0 then -1*nvl(m.excl_amt,0) 
      else nvl(excl_amt,0) 
     end 
    ) as total_excl_amt 
from med_clm m 
/
+0

它不是編譯並給出了大量的語法errors.Also的,我們能使用別的內部CASE – Rohit 2011-06-01 10:52:21

+0

情況需要結束。 @Rohit是的,否則可以採用 – Sathya 2011-06-01 11:22:29

+0

我只是固定的錯誤在你的答案 – 2011-06-01 11:32:21

2

的語法IF ... THEN而不是IF ... BEGIN。但是,您的主要問題似乎是,您嘗試在普通的SQL語句中執行該操作,而不是在存儲過程中執行該操作。您需要改用CASE

0

我想,這應該實現描述的邏輯:

SELECT 
    SUM(
    CASE 
     WHEN EXCL_AMT <> 0 AND SIGN(EXCL_AMT) = -SIGN(BILL_CHRG_AMT) 
     THEN -NVL(EXCL_AMT, 0) 
     ELSE NVL(EXCL_AMT, 0) 
    END 
) 
FROM MED_CLM