2014-12-05 4 views
1

Я пытаюсь запустить запрос по цене предмета, купленного клиентом. Проблема заключается в том, что все продукты построены на базовом уровне с «пустым» состоянием, например, см. Ниже.Различные цены за состояние продукта

STATE PRODUCT PRICE 
     X  5.00 
OH  X  5.25 
CA  X  5.75 
     Y  6.00 

Я хотел бы знать, если им уже где-то с этим типом сазе и где я поместил бы это, так как это будет объединение ничего о

(case when a.state= b.state THEN a.state ELSE 'BLANK' END) 

EDIT:

SELECT o.NAME, o.STATE, o.ITEM, i.RATE 
FROM ORDERS o 
LEFT JOIN ON ITEM_DESC i 
o.ITEM = i.ITEM AND 
CASE 
     WHEN o.state = i.state 
     THEN o.state 
     ELSE NULL 
     END = i.state 

REVISED это работает, но NULL не работает, поэтому мне нужно что-то заменить, чтобы поймать пустое поле (поле пуста/пустое не NULL)

+1

случай, когда сливаются (состояние, '') = '', то 'пустой' конец, охватывает как пустое состояние и NULL состояние. – radar

+0

@radar ... Где бы я разместил это, если он будет частью инструкции JOIN? И что происходит, когда есть матч? – dc4teg

+0

можете ли вы опубликовать свой другой стол и присоединиться к тому, что делается, без каких-либо подробностей, это трудно сказать. – radar

ответ

1

В случае ставки null, вы можете получить для этого результат, выполнив коррелированный подзапрос в операторе case.

SQL FIDDLE DEMO

SELECT o.NAME, 
     o.STATE, 
     o.ITEM, 
     case when i.RATE is NULL 
      then (select rate from item_desc 
        where item = o.item 
        and coalesce(state,'') ='' 
       ) 
      else i.RATE 
      end as RATE 
FROM ORDERS o 
LEFT JOIN ITEM_DESC i 
ON o.ITEM = i.ITEM 
AND o.STATE = i.STATE 
Смежные вопросы