2014-11-13 2 views
1

SQL Query:Sql запрос, который фильтрует по одному или нескольким полям

Select * 
from tabEmployee 
where city='Delhi' OR locality='' OR pincode='' OR salary Between '' AND '' OR designation='' 

Я совершенно новым для SQL Server.

Я хочу написать запрос sql, где город является обязательным, а другие поля могут или не могут быть предоставлены пользователем.

Я хочу сказать, входит ли один пользователь в местность = «Кирти Нагар».

Фильтр должен работать в соответствии с городом = 'Дели' и местностью = 'Кирти Нагар'.

В других случаях любой пользователь может ввести только диапазон зарплаты.

Затем фильтр должен работать по городу = «Дели» и заработной платы между 5000 и 10000.

Если пользователь не вводит никаких полей, то фильтр должен работать в соответствии с города = «Дели» только.

Как я могу это сделать?

ответ

0

Попробуйте это:

Select * 
    from tabEmployee 
    where city='Delhi' AND ISNULL(locality_parameter,locality)=locality AND 
    (pincode=pincode_parameter OR pincode_parameter=0) AND 
    ISNULL(designation_parameter ,designation)=designation AND 
    salary BETWEEN ISNULL(lower,salary) AND ISNULL(upper,salary) 

Set pincode_parameter = 0, когда пользователь не вводит Pincode

+0

Привет, Дони, Спасибо за ответ. pincode_parameter = 110034 SELECT * FROM dbo.tabEmployee WHERE город = 'Дели' и пин-код = ISNULL (pincode_parameter, пин-код) result- Возвращает две строки, которые имеют города = 'Дели' и Pincode = 110034.(OK) Но, как и я: pincode_parameter = NULL SELECT * FROM dbo.dbo.tabEmployee WHERE город = 'Дели' и пин-код = ISNULL (pincode_parameter, пин-код) result- Возвращает три строки, которые имеют city ​​= 'Delhi' и pincode = 110034.Но он оставляет те строки, у которых есть pincode = NULL. Если он должен вернуть весь pincode (включая NULL). – user2791156

+0

@ user2791156 Теперь добавили новое условие: ИЛИ пинкод IS NULL –

+0

Привет Доний, pincode_parameter = 110034 SELECT * FROM dbo.tabEmployee WHERE город = 'Дели' AND (пин-код = (ISNULL (pincode_parameter, пин-код)) ИЛИ pincode IS NULL) Результат. Возвращает девять строк, которые имеют города = 'Дели' и pincode = 110034. Но теперь он также принимает строки pincode = NULL. который не ожидал. Но, как и я: pincode_parameter = NULL SELECT * FROM dbo.dbo.tabEmployee WHERE город = 'Дели' AND (пин-код = (ISNULL (pincode_parameter, пин-код)) ИЛИ пинкод IS NULL) result- Возвращает десять строк которые имеют города = 'Дели' и pincode = 110034 с pincode = NULL. Работает отлично. Хорошо. – user2791156

0

Попробуйте это:

Select * from tabEmployee 
where city='Delhi' and (locality='Kirti Nagar' OR pincode='411521' OR 
(salary Between '5000' AND '10000') OR designation='Engineer') 
+0

Спасибо за ответ и. Мое требование: не вводите местонахождение/пинкод/​​зарплату/обозначение, тогда он должен фильтровать по городу = «Дели». В противном случае следует фильтровать город и другое поле. ПРИНИМАЯ ВО ВНИМАНИЕ, что вы вводите все поля. – user2791156

0

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

Select 
    * 
from 
     tabEmployee 
where 
     city='Delhi' 
     and   
     (locality = CASE WHEN locality_parameter <> '' THEN locality_parameter ELSE '' END) 
     and 
     (pincode= CASE WHEN pincode_parameter <> '' THEN pincode_parameter ELSE '' END) 
     and 
     (designation= CASE WHEN designation_parameter <> '' THEN designation_parameter ELSE ''   END) 
+0

Привет Хардик, Спасибо за ваш ответ. Но ваш запрос вызывает ошибку «Выражение небулевого типа, указанное в контексте, в котором ожидается условие». Но если я удалю 'OR NULL', это сработает. Но одно поле из локации/пинкода/зарплаты/назначения является обязательным. Мое требование: не вводите местонахождение/пинкод/​​зарплату/обозначение, тогда оно должно фильтровать по городу = «Дели». В противном случае следует фильтровать город и другое поле. – user2791156

+0

@ user2791156 Я отредактировал ответ, пожалуйста, проверьте, что это решение работает для одного условия. –

+0

Не работает. Он работает только тогда, когда второе условие (местность) истинно. если он NULL, он не фильтрует в соответствии с городом. – user2791156

Смежные вопросы