SQL запрос для выбора * из TableName, где Type = '*' - PullRequest
1 голос
/ 15 сентября 2011

У меня есть таблица Items, как написано ниже

Id,Name,Type

Возможные значения строки Type = a, b, c

На веб-странице, которую я создал dropdown(<select>), с опцией, a, b, c, all, пользователь может выбрать любое значение и затем отправить страницу, которая в конечном итоге выполняет запрос и отображает результаты для пользователя.

Запрос для этого

select * from Items where Type=@Type

Это прекрасно работает, когда type = a, b, c, но не работает, когда type = all

Я знаю, что для type = 'All' я могу сделать select * from Table, но я хочу использовать тот же запрос выше.

Как написать этот запрос ??

Я не ищу логическое действие любого типа, которое нужно выполнить на стороне сервера (IIS), например

if (type=="all")
{
   //Use query 1
}
else
{
   //Use Uqery2
}

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

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011
select * from Items
where ((lower(@Type) = 'all') or (Type = @Type))

Если @Type нельзя сравнить с varchar 'all', используйте вместо этого ноль, например

select * from Items
where ((@Type is null) or (Type = @Type))
1 голос
/ 15 сентября 2011

Вы можете добавить столбец dummy TypeAll в подзапрос и отфильтровать его.

Оператор SQL

SELECT  Id, Name, Type
FROM    (
          SELECT  *
                  , TypeAll = 'all'
          FROM    Items
        ) q
WHERE   Type = @Type
        OR TypeAll = @Type        

Тестовый скрипт

DECLARE @Type VARCHAR(32) = 'all'

;WITH Items (Id, Name, Type) AS (
  SELECT  1, 'Test', 'a'
  UNION ALL SELECT 2, 'Test', 'b'  
)
SELECT  Id, Name, Type
FROM    (
          SELECT  *
                  , TypeAll = 'all'
          FROM    Items
        ) q
WHERE   Type = @Type
        OR TypeAll = @Type        
0 голосов
/ 15 сентября 2011

Я вижу, вы не хотите оператор if else

в этом случае я лично изменил бы значения раскрывающихся списков на

a  value "=a"
b  value "=b"
c  value "=c"
all value "is not null"

тогда в вашем sql

select * from Items where Type @Type

или

select * from Items where Type like @Type

со значением @type, если все это%?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...