我有一张表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
}
我希望在查询中执行所有逻辑。
答案 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
列添加到子查询中并对其进行过滤。
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的值