Оператор CASE в условии SQL IN - PullRequest
0 голосов
/ 24 мая 2019

Входной параметр содержит строку, разделенную запятыми.

DECLARE @FacilityCode VARCHAR(MAX) = 'a,b,c,d,e,f,g,h,i'

ID |Значение

1 |a

2 |b

3 |с

4 |d

Мне нужно запросить соответствующие данные, используя разделенную запятыми строку.

Если @FacilityCode = 'a,b' Таблица должна вернуть a, b в виде строк.

Если @FacilityCode = '' Таблица должна вернуть все строки

Я использую запрос ниже.Это показывает мне синтаксические ошибки.Спасибо за продвижение.

SELECT Value 
FROM Table
WHERE [GROUP] IN (CASE WHEN COUNT(SELECT Value FROM STRING_SPLIT(@FacilityCode,','))) = 0 
THEN '%%' ELSE (SELECT Value FROM STRING_SPLIT(@FacilityCode,',')) END

1 Ответ

0 голосов
/ 24 мая 2019

Вы можете просто добавить OR @FacilityCode = '' к предложению where:

SELECT value
FROM t
WHERE @FacilityCode = '' OR EXISTS (
    SELECT 1
    FROM STRING_SPLIT(@FacilityCode, ',') AS x
    WHERE x.[value] = t.[group]
)
...