2015-02-25 5 views
2

Мне нужно выбрать разные ItemID в разных двух случаях.SQL Server Query select case, когда

В первом случае я выбираю ItemID = @OrgID, который является родителем организации, потому что у них нет ParentOrganisationId (равно null) - тогда этот случай работает нормально.

У меня проблема во втором случае, когда я проверяю, является ли это веткой, тогда возьмите с подзапросом ParentOrganisationId, чтобы принести = ItemID в первом, где условие. Этот второй случай получает пустое значение.

Declare @OrgID int 
Set @OrgID = 91702 --- 91702(Branch Organisation), 83279(Parent Organisation) 

select ItemID 
FROM Organisations 
where ItemID = case 
        when ParentOrganisationId is null 
        then @OrgID --case without branches 
        when ParentOrganisationId is not null 
        then (select ParentOrganisationId 
          from Organisations 
          where ItemID = @OrgID) --case with branches 
       end 
+0

положить, что в еще части первый саз –

+0

Также с еще в первом случае становится нулевым – ADC

ответ

0

ли не следующая работа запрос для вас?

select coalesce(ParentOrganisationId, ItemId) as ItemID 
from Organisations 
where ItemID = @OrdID 
+0

Да, метод coalesce работает нормально, но я не могу использовать этот метод в моем Извините, по разным причинам. – ADC

+0

Хорошо, так что, похоже, хорошо работает, спасибо за вашу помощь! 'Признаться @OrgID INT Объявить @OrgFinalID Int Set @OrgID = 91702 --- 91703, 91702, 83279 выберите @OrgFinalID = случай когда ParentOrganisationId равна нулю, то Itemid еще ParentOrganisationId конец от T2U_Organisations где ItemID = @ OrgID' – ADC

4

Оператор case возвращает скалярное выражение, а не список. Удалите case и выразить логику с использованием основных логических операторов:

select ItemID 
FROM Organisations 
where (ParentOrganisationId is null and ItemID = @OrgID) or 
     (ParentOrganisationId is not null and 
     ItemID in (select ParentOrganisationId from Organisations where ItemID = @OrgID) 
    ); 
+0

я заметил, что ParentOrganisationId был NVARCHAR так я вставил в гипсе, но пока не работает, то результат будет нулевым в ParentOrganisationId не равно нулю: 'выберите ItemID от организаций где (ParentOrganisationId является недействительным и ItemID = @OrgID) или (ParentOrganisationId не равно нулю, и в ItemID (выберите CAST (ParentOrganisationId AS INT) от организаций, где ItemID = @OrgID) ); ' – ADC