2013-09-02 2 views
1

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

select employee, date, workingrule 
case when workingrule is null 
then 1 else (select employeenumber, bonusrule from employeelist) 
end 
from employeedetails 

В принципе, если рабочий орган пуст, я хотел найти служащих bonusrule. Любая помощь руководства очень ценится. Thanx

+0

Ваш 'Then' Статья содержит одно значение, а 'остальное' статья содержит два. Кроме того, предложение «else» возвращает более одной строки, поэтому отфильтруйте его с предложением where. –

+1

В зависимости от вашей РСУБД вы должны иметь возможность «выбрать IfNull (workingrule, bonusrule)» –

+0

Какие СУБД вы используете? – Taemyr

ответ

2

это работает для SQL Server (потому что с помощью isnull, но это можно изменить на любой СУБД конкретного запроса):

select 
    ed.employee, ed.date, 
    isnull(ed.workingrule, el.bonusrule) as [rule] 
from employeedetails as ed 
    left outer join employeelist as el on el.employeenumber = ed.employeenumber 

или если вы хотите и (должен работать на любой RDBMS):

select 
    ed.employee, ed.date, 
    ed.workingrule, 
    case when ed.workingrule is null then '1' else el.bonusrule end as bonusrule 
from employeedetails as ed 
    left outer join employeelist as el on el.employeenumber = ed.employeenumber 
+0

Я попробовал второй оператор, и теперь я получаю «неудачное преобразование при преобразовании значения nvarchar« TP-WORK-FULL »в тип данных int. Это вызвано «равно нулю, а затем 1»? – Withdalot

+0

@Withdalot yep, изменил запрос. Это произошло потому, что 1 - int, а ваш столбец bonusrule - nvarchar. –

+0

@Withdalot вы используете SQL Server? –

0
select 
    employee, date, Coalesce(workingrule, BonusRule) as Rule 
from 
    employeedetails ed 
    left join employeelist el on 
    el.employeenumber = ed.employeenumber 
+0

К сожалению ifnull не является признанным встроенным именем функции ... – Withdalot

+0

В этом случае - см. Мое редактирование –

Смежные вопросы