SQL, BETWEEN и CASE (3 параметра условия)

Я застрял на каком-то SQL с условием CASE.

Это серверная часть отчета SSRS 2005, и пользователь может выбрать ВСЕ, ‹ 50 КБ или> 50 КБ.

Кишки есть..

SELECT LOANAMOUNT
FROM LOANS
WHERE loanAmount (CASE WHEN @Parameter 'All' THEN  = loanAmount  --Ignore the variable
ELSE @parameter = 1 THEN <= 50k
ELSE @parameter = 2 THEN > 50K
END CASE)

Проблема, с которой я сталкиваюсь, - это знаки >‹. Я могу учитывать =, но я не могу сказать, чтобы он получил ВСЕ, а затем изменил свои операторы в случае.

Любые идеи были бы замечательными. Спасибо


person 10thTiger    schedule 10.11.2014    source источник


Ответы (4)


Все=Выбрать все записи

или зависит от @Parameter значений, которые будут отфильтрованы

SELECT *
FROM LOANS
WHERE
 (@Parameter = 'All') OR
 (@Parameter = '1' AND loanAmount <= 50000) OR
 (@Parameter = '2' AND loanAmount > 50000) 
person Ganesh_Devlekar    schedule 10.11.2014

Вам вообще не нужен case

SELECT LOANAMOUNT
FROM LOANS
WHERE @Parameter 'All'
OR (@parameter = '1' AND loanAmount <= 50000)
OR (@parameter = '2' AND loanAmount > 50000)
person juergen d    schedule 10.11.2014

думаю это будет быстрее всего

SELECT *
FROM LOANS
WHERE
 (@Parameter = 'All') OR
 (@Parameter = '1' AND loanAmount <= 50000) OR
 (@Parameter = '2' AND loanAmount > 50000) 

Обратите внимание, @Parameter должен быть строкового типа, поэтому сравните его с 'All', '1' и '2'.

сумма кредита — это число. 50K ничего не значит как числовая константа, используйте целое число.

person Hogan    schedule 10.11.2014
comment
Работал как шарм. Спасибо - person 10thTiger; 10.11.2014

Для решения, которое фактически использует CASE:

SELECT LOANAMOUNT
FROM LOANS
WHERE CASE WHEN @Parameter = 'All' THEN 1
        WHEN @Parameter = 1 AND loanAmount <= 50000 THEN 1
        WHEN @Parameter = 2 AND loanAmount >  50000 THEN 1
        ELSE 0
    END = 1
person Bacon Bits    schedule 10.11.2014