2014-02-21 3 views
-1

Просьба помочь. У меня есть ниже столбцов в MyTable: а, б, в, д, е, ж, зSQL отсутствует, если оператор

Я хочу, чтобы сделать некоторую обработку, чтобы получить только 3 колонки (а, цена и час)

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 И PREMIUM_CURRENCY = TERM_CURRENCY) ТОГДА раунд ((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

Какие РСУБД? MySQL? SQL Server? Oracle? ...? –

ответ

0

Используйте случай вместо того, если он сделает то, что вы хотите.

например. что-то вроде 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 И PREMIUM_CURRENCY = TERM_CURRENCY) THEN круглые ((TERM_MARKET_PRICE/Условная), 9) еще случай когда (NOTIONAL_CURRENCY = PREMIUM_CURRENCY) ТОГДА круглых ((BASE_MARKET_PRICE_PERCENT/100), 9) остального круглого ((TERM_MARKET_PRICE_PERCENT/100), 9) еще 0,1 конца кОНЦА как "ЦЕНА" , TERM_CURRENCY "ВАЛЮТА" ОТ DBAPP.SD_S TAGE – Drsin

+0

Ошибка, которую я вижу, заключается в том, что в моем примере я сначала закончил внутренний оператор case, затем имел else для внешнего случая, а затем конец для внешнего случая. У вас есть два конечных оператора прямо вместе. Это должно быть иначе, иначе конец, у вас есть еще другой конец. Это может быть не единственная ошибка, но позволяет исправить это, а затем посмотреть, есть ли что-то еще. –

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 
Смежные вопросы