2014-02-21 96 views
-1

請幫忙。我列在下面MYTABLE:A,B,C,d,E,G,HSQL缺少語句

我想要做一些處理,只得到3列(A,價格和h)

select a, if a = b and d = e then g/h as price 
else 
if a = d then g/100 as price 
else 
h/100 as price 
if price = 0 
then 
price = 0.1, 
h 
from my table 

感謝所有,但我仍然得到'無效的參數數量。下面是我的SQL

選擇TICKETID AS 「BLO」,

情況下(NOTIONAL_CURRENCY = BASE_CURRENCY AND PREMIUM_CURRENCY = TERM_CURRENCY) THEN 輪((TERM_MARKET_PRICE /名義),9) 其他

case 

    when (NOTIONAL_CURRENCY = PREMIUM_CURRENCY) 
       THEN 
        round((BASE_MARKET_PRICE_PERCENT/100),9) 
     else 

round((TERM_MARKET_PRICE_PERCENT/100),9) 

    else .1 end 

END爲 「價格」

,TERM_CURRENCY 「貨幣」

FROM DBAPP.SD_STAGE

+1

這個SQL從哪裏來?它看起來不像SQL。 – dasblinkenlight

+2

那麼這裏的*問題*是什麼? –

+2

哪個RDBMS? MySQL的? SQL Server?甲骨文? ...? –

回答

0

用例代替if,它會做你想做的。

例如像select a, case when a = b and d = e then g/h else case when a = d then g/100 else h/100 else .1 end else .1 end as price from my_table

+0

感謝所有,但我仍然得到'無效的參數數量。下面是我的SQL 選擇TICKETID AS 「BLO」, 情況下(NOTIONAL_CURRENCY = BASE_CURRENCY AND PREMIUM_CURRENCY = TERM_CURRENCY)THEN輪((TERM_MARKET_PRICE /名義),9)其他 情況 時(NOTIONAL_CURRENCY = PREMIUM_CURRENCY) THEN 輪((BASE_MARKET_PRICE_PERCENT/100),9) 別的 輪((TERM_MARKET_PRICE_PERCENT/100),9) 別的0.1端 END爲 「價格」 ,TERM_CURRENCY 「貨幣」 FROM DBAPP.SD_S TAGE – Drsin

+0

我看到的錯誤是,在我的例子中,我先結束了內部case語句,然後再使用外部case,然後結束使用outer case您將兩個結束語句放在一起。它需要別人結束別的結束,你還有別的結束這可能不是唯一的錯誤,但讓我們解決這個問題,然後看看是否有其他的東西。 –

3

的語法在SQL條件語句是

CASE WHEN <condition> THEN a ELSE b END CASE 

您的選擇可以寫爲:

select a, 
     case when (case when a = b and d = e and h > 0 then g/h 
      when a = d then g/100 
      else h/100 
      end case) = 0 then .1 
     else (case when a = b and d = e then g/h 
      when a = d then g/100 
      else h/100 
      end case) 
     end case as price, 
     h 
from my table 

簡化:

select a, 
     case when a = b and d = e and h > 0 and g > 0 then g/h 
      when a = d and g > 0 then g/100 
      when h > 0 then h/100 
      else 0.1 
     end case as price, 
     h 
from my table 
1

可能在某些SQL簡單品種,但要覆蓋他們所有你可以只窩一個CASE;

SELECT a, CASE 
      WHEN a = b AND d = e THEN CASE WHEN g=0 THEN 0.1 ELSE g/h END 
      WHEN a = d   THEN CASE WHEN g=0 THEN 0.1 ELSE g/100 END 
      ELSE      CASE WHEN h=0 THEN 0.1 ELSE h/100 END    
      END price, h 
FROM my_table