2014-08-21 4 views
-1

Я хотел бы написать запрос, который будет “filter” количество строк, возвращенных в зависимости от состояния грузовика. Из пользовательского интерфейса отправлю значение ‘1’, если я только хочу посмотреть грузовики, которые не были закрыты, ‘2’, чтобы увидеть все грузовики.Где предложение с условием таблицы

select * 
from invoice left outer 
join truck 
    on (invoice.invnum = truck.invnum) 

Это возвращает правильное количество строк.

Проблема: мне нужен где пункт, который будет смотреть на close_date поле таблицы грузовика и определить, если она равна нулю или нет. Вот уловка, если в таблице грузовиков нет записей, по-прежнему возвращайте строку из таблицы счетов.

select * 
from invoice left outer 
join truck 
    on (invoice.invnum = truck.invnum) 
where UI.value = (select close_date from truck where invoice.invnum = truck.invnum) “if no record is returned here, return the value ‘2’ 
+0

Я думаю, что вы неправильно понимаете предложение 'where'. Или, по крайней мере, то, что он может сделать для вас здесь. Возможно ли, что вы поместили это в хранимую процедуру, завернутую в операторы 'if'? – Jake

ответ

0

Просьба уточнить ваш вопрос. Вы хотите сделать что-то подобное?

select * 
from 
    invoice 
    left outer join 
    truck on 
     invoice.invnum = truck.invnum 
where 
    (UI.value = 1 AND truck.close_date IS NULL) OR 
    (UI.value = 2) 

Или вы хотите это сделать?

select * 
from 
    invoice 
    left outer join 
    truck on 
     invoice.invnum = truck.invnum 
where UI.Value = 
    (
    SELECT CASE WHEN MAX(close_date) IS NULL THEN 2 ELSE 1 END 
    FROM truck 
    WHERE invoice.invnum = truck.invnum) 
Смежные вопросы