переключить регистр в пункт где - PullRequest
2 голосов
/ 11 мая 2010

Мне нужно проверить три условия:

if @filter = 1
{
    select * from employeestable where rating is not null
}
else if @filter = 2
{
    select * from employeestable where rating is null
}
else
{
    select * from employeestable  
}

Это мне нужно сделать, используя утверждение case. теперь у меня более 30 строк запроса, если я использую регистр, я могу уменьшить свой код до 70%
Пожалуйста, дайте мне знать, как я могу это сделать.

Ответы [ 3 ]

6 голосов
/ 11 мая 2010

Как насчет этого?

WHERE   (@filter = 1 AND rating IS NOT NULL)
OR      (@filter = 2 AND rating IS NULL)
OR      (@filter <> 1 AND @filter <> 2)
2 голосов
/ 11 мая 2010

Сокращение вашего кода на 70% - это хорошо, но использование индекса - единственный способ повысить эффективность запроса. Прочитайте эту статью: Условия динамического поиска в T-SQL Эрланда Соммарского, . Существует множество способов иметь динамические условия поиска, каждый из которых имеет свои тонкие компромиссы производительности. Если вас беспокоит повторение большей части запроса несколько раз, рассмотрите возможность замены его представлением.

0 голосов
/ 11 мая 2010

Вы можете воспользоваться битовой логикой.

Данные испытаний

DECLARE @employeestable TABLE (rating INTEGER)
INSERT INTO @employeestable
SELECT NULL
UNION ALL SELECT 99

DECLARE @filter INTEGER
SET @filter = 3

Оператор SQL

SELECT  *
FROM    (
          SELECT  Filter = CASE WHEN rating IS NULL THEN 2 ELSE 1 END
                  , *
          FROM    @employeestable
        ) et
WHERE   et.Filter & @filter = et.filter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...