Показать все значения оператора IN со статусом «доступно» или «недоступно» - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть список строк типа ('222','333','43242','3242'), который я должен использовать в таблице dummy, скажем, у моего пустышка таблицы есть только два значения из этого списка ('222','333'), данные должны отображаться как

dummyID    dummyStatus
222        Available
333        Available 
43242      Not Available
3242       Not Available

Я перепробовал все возможные запросы, например

select dummyId, case when dummyId is null 'Available' else 'Not Available' end
from dummy
where dummyId in ('222','333','43242','3242')

, но это не работает.

1 Ответ

1 голос
/ 14 февраля 2020

демо на дб <> скрипка

  1. Вы Case When ... Then End неверный синтаксис
  2. Вы должны использовать Желаемые значения таблицы как ниже

select v1.value, 
    case when dummyId is not null then 'Available' else 'Not Available' end as dummyStatus
from (
     values('222'),('333'),('43242'),('3242')
)v1(value)

left join (
     values('222'),('333') -- Let's say your table here
)dummy(dummyId) on v1.value = dummy.dummyId

Обновлено (Param is '(222,333,43242,3242)')

Демонстрация на db <> fiddle

Допустим, у нас есть функция strSplit, которая поможет нам разбить строку на таблицу, тогда вы можете достичь таким образом

declare @str varchar(200) = '(222,333,43242,3242)'

set @str = REPLACE(REPLACE(@str,'(', ''), ')', '')


select v1.val, 
case when dummyId is not null then 'Available' else 'Not Available' end as dummyStatus
from strSplit(@str, ',')v1

left join (
     values('222'),('333') -- Let's say your table here
)dummy(dummyId) on v1.val = dummy.dummyId

Примечание : SQL Server 2016 и более поздние версии имеют STRING_SPLIT Тогда Вы просто делаете это, демо на дБ <> fiddle

declare @str varchar(200) = '(222,333,43242,3242)'

set @str = REPLACE(REPLACE(@str,'(', ''), ')', '')

select v1.value, 
case when dummyId is not null then 'Available' else 'Not Available' end as dummyStatus
from STRING_SPLIT(@str, ',')v1

left join (
     values('222'),('333') -- Let's say your table here
)dummy(dummyId) on v1.value = dummy.dummyId

Выход

enter image description here

...