1

У меня есть запрос, в этом есть несколько условий на основе параметра

select a,b,c,d from xyz where case p='Closed' then (q-r)=0 case p='Pending' then (q - isnull(r,0) )>0 case P='All' then all records to be display

Это дает неправильный синтаксис в случае строки

Пожалуйста, предложите мне любое другое решение, чтобы изменить «где условие» в зависимости от значения параметра,

поскольку в данном sql условие 'where' зависит от значения параметра p.

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

В первом случае, если p = 'Закрыто', select ... where q-isnull(r,0)=0

если p = 'Pending', тогда select ... where (q - isnull(r,0) )>0

В первом условии он сравнивает условие «равно» и в следующем примере он «больше» нулевого значения.

как в третьем условии, я хочу, чтобы отобразить все записи.

Здесь проблема в том, что структура 'case' возвращает только значение, а не выражение.

1 ответ1

0

Если вы хотите, чтобы несколько критериев оценивались в вашем заявлении, то все, что вам нужно сделать, это сдвинуть их все до THEN и вернуть значение, которое указывает, что он прошел проверку.

Для вашего кода это можно сделать так:

select a,b,c,d from xyz where 1 =
case p='Closed' and (q-r)=0 then 1
case p='Pending' and (q - isnull(r,0) )>0 then 1
case P='All' then 1

Хотя ваш синтаксис не работает с SQL Server (я не уверен, какую базу данных вы запрашиваете). Рабочая версия в SQL Server будет:

select a,b,c,d from xyz where 1 =
CASE 
    WHEN p='Closed' AND (q-r)=0 THEN 1
    WHEN p='Pending' AND (q - isnull(r,0) )>0 THEN 1
    WHEN P='All' THEN 1
    ELSE 0 
END

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .