Как написать оператор select внутри case

У меня есть хранимая процедура, которая содержит оператор case внутри оператора select.

select Invoice_ID, 'Unknown' as Invoice_Status, 
case when Invoice_Printed is null then '' else 'Y' end as Invoice_Printed, 
case when Invoice_DeliveryDate is null then '' else 'Y' end as Invoice_Delivered, 
case when Invoice_DeliveryType <> 'USPS' then '' else 'Y' end as Invoice_eDeliver, 
Invoice_ContactLName+', '+Invoice_ContactFName as ContactName, 
from dbo.Invoice
left outer join dbo.fnInvoiceCurrentStatus() on Invoice_ID=CUST_InvoiceID 
where CUST_StatusID= 7 
order by Inv_Created  

В строке case when Invoice_DeliveryType <> 'USPS' then '' else 'Y' end as Invoice_eDeliver

Мне нужно проверить действующий адрес электронной почты (если адрес электронной почты действителен, отобразите Y, иначе отобразите N).

Таким образом, строка будет выглядеть так:

if Invoice_DeliveryType <> 'USPS' then '' else ( If ISNULL(Select emailaddr from dbo.Client Where Client_ID = SUBSTRING(Invoice_ID, 1, 6)), 'Y', 'N')

Как я могу написать этот запрос?


person user3929962    schedule 10.09.2014    source источник


Ответы (1)


Вы можете сделать это с помощью case. Я думаю, что вам нужна следующая логика:

(case when Invoice_DeliveryType <> 'USPS' then ''
      when exists (Select 1
                   from dbo.Client c
                   Where c.Client_ID = SUBSTRING(i.Invoice_ID, 1, 6) and
                         c.emailaddr is not null
                  )
      then 'Y'
      else 'N'
 end)
person Gordon Linoff    schedule 10.09.2014
comment
Я получаю сообщение об ошибке Преобразование значения nvarchar '20111028995999' привело к переполнению столбца int. EmailAddr на самом деле является значением GUID - person user3929962; 10.09.2014
comment
@user3929962 . . . Я не думаю, что emailaddr необходим для запроса, предполагая, что цель isnull() состоит в том, чтобы определить, возвращается ли какая-либо строка, а не значение NULL в поле электронной почты. Эта ошибка не связана с этим кодом. - person Gordon Linoff; 10.09.2014
comment
Я обновил свой запрос с внесенными вами изменениями, но все равно получаю ту же ошибку. Исходный запрос работает отлично. - person user3929962; 10.09.2014
comment
@user3929962 . . . Ничто в этом фрагменте не может преобразовать строку из 14 символов в целое число. Возможно, 6-символьный, в зависимости от предложения where, но не 14-символьный. - person Gordon Linoff; 10.09.2014
comment
добавленный И адрес электронной почты не равен нулю, и теперь запрос работает. Спасибо за вашу помощь - person user3929962; 10.09.2014