2016-12-30 6 views
0

Я пытаюсь написать оператор CASE в SQL.Оператор case с условием в SQL

ДБ структура выглядит следующим образом:

============================================== 
tender_id | file_no | subject 
============================================== 

150001   16/41  Against Shipment 
150005   16/42  Pending 
150008   16/43  Shipment Clause 
1500081  16/43  NULL or Empty 
1500082  16/43  NULL or Empty 
============================================== 

Я пытаюсь написать сазе, который показывает тему. Критерии: если объект NULL or EMPTY, тогда он должен выбрать предмет, в котором предмет вводится с критериями where file_no = file_no. В этом случае тендер_ид 1500081 и 1500082 должны принять предмет как «Отгрузка» с тех пор, как file_no этих совпадений.

Может ли кто-нибудь помочь мне в этом?

+0

Можете ли вы предоставить полное выражение SQL, который неисправного? – soundslikeodd

+0

Если вы выразили его в форме скрипта SQL, это может помочь вам ответить на ваш вопрос. –

ответ

0

Вы можете решить эту проблему с автообъединение:

SELECT t1.tender_id, t2.file_no, 
    CASE t1.subject 
    WHEN 'NULL or Empty' THEN t2.subject 
    ELSE t1.subject END AS subject 
FROM YourTableName AS t1 
JOIN YourTableName AS t2 
    ON (t2.file_no = t1.file_no AND t2.subject <> 'Null or Empty'); 

Это предполагает, что есть только одна строка, где субъект устанавливается для каждого file_no.

Обновление: Я создал SQLFiddle для демонстрации этого запроса. Это, как я понимаю, удовлетворяет описанной вами проблеме.

+0

По какой-то причине он не работает. Я проверяю причину. –

+0

Я обновил вопрос с тем, что я пробовал. не могли бы вы помочь мне в этом. –

0

Sqlfiddle here

я предположил, что первые два столбца, чтобы быть int вы можете изменить его в соответствии с базой данных и редактирования соответственно.

Предполагая, что вы всегда будете иметь file_no в таблице вы поиск по file_no всегда, который даст вам желаемый результат

SELECT subject 
FROM [table_name] 
WHERE file_no = (SELECT file_no FROM [table_name] where tender_id = [required_tender_id]) 
AND subject IS NOT NULL;