从TableName中选择*的SQL查询,其中Type ='*'

时间:2011-09-15 06:08:44

标签: sql sql-server-2008

我有一张表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 个答案:

答案 0 :(得分:2)

select * from Items
where ((lower(@Type) = 'all') or (Type = @Type))

如果@Type无法与varchar 'all'进行比较,请使用null,例如

select * from Items
where ((@Type is null) or (Type = @Type))

答案 1 :(得分:1)

您可以将虚拟 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        

答案 2 :(得分:0)

我看到你不想要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全部为%?

,则为@type的值