2014-10-10 5 views
1

У меня есть SQL запрос, который упрощенным выглядит следующим образом:SQL Multiple Case Когда и Mulitple результаты

declare @Method varchar(max); 
set @Method = 'phone' 

select 
case 
    when @Method = 'phone' and u.PhoneNumber is not null and u.PhoneNumberConfirmed = 1 then u.PhoneNumber 
    when @Method = 'email' and u.Email is not null and u.EmailConfirmed = 1 then u.Email 
end, 

case 
    when @Method = 'phone' and u.PhoneNumberSecondary is not null and u.PhoneNumberSecondaryConfirmed = 1 then u.PhoneNumberSecondary 
    when @Method = 'email' and u.EmailSecondary is not null and u.EmailSecondaryConfirmed = 1 then u.EmailSecondary 
end 

Так что отображает его в 2 колонки. Я хочу, чтобы все результаты были всего в 1 столбце. Я мог бы разделить его с союзом, как это:

... 
select 
case 
    when @Method = 'phone' and u.PhoneNumber is not null and u.PhoneNumberConfirmed = 1 then u.PhoneNumber 
    when @Method = 'email' and u.Email is not null and u.EmailConfirmed = 1 then u.Email 
end 

from 
... 

union 

select 

case 
    when @Method = 'phone' and u.PhoneNumberSecondary is not null and u.PhoneNumberSecondaryConfirmed = 1 then u.PhoneNumberSecondary 
    when @Method = 'email' and u.EmailSecondary is not null and u.EmailSecondaryConfirmed = 1 then u.EmailSecondary 
end 

Но проблема в том, то что это может быть, что оно не существует каких-либо строк с PhoneNumberSecondary, а затем я получаю строку NULL.

Каков наилучший способ решить эту проблему?

+0

Добавить проверку в ИНЕКЕ второго запроса для '' PhoneNumberSecondary' или EmailSecondary'? – CompanyDroneFromSector7G

+0

Если вы дадите весь запрос, я поставлю ответ – CompanyDroneFromSector7G

ответ

2

Использование UNION - правильный способ сделать это. Если вам нужно избавиться от NULL с, добавить NULL чек, например, на внешний запрос:

SELECT contact_info 
FROM (
select 
case 
    when @Method = 'phone' and u.PhoneNumber is not null and u.PhoneNumberConfirmed = 1 then u.PhoneNumber 
    when @Method = 'email' and u.Email is not null and u.EmailConfirmed = 1 then u.Email 
end as contact_info 
from ... 
UNION 
select 
case 
    when @Method = 'phone' and u.PhoneNumberSecondary is not null and u.PhoneNumberSecondaryConfirmed = 1 then u.PhoneNumberSecondary 
    when @Method = 'email' and u.EmailSecondary is not null and u.EmailSecondaryConfirmed = 1 then u.EmailSecondary 
end as contact_info 
from ... 
) 
WHERE contact_info IS NOT NULL 
+0

Ах умный. Это сработало отлично. Спасибо :) – stibay

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