如何解决如何过滤所有行的记录?
| 我正在设计一个SQL查询以从给定表中提取所有记录。但是,这里的窍门是这种逻辑基于数字数据库字段。因此,共有4个选择:0、1、2、3。如果用户选择0,1或2,那么我的查询将返回具有指定值的行。但是,如果他们选择3,则应该返回所有行。如何在SQL中执行此操作?我知道这是否是字符串,可以执行以下操作: WHERE = CASE WHEN = 3然后\'%\'否则结束 但是在这种情况下,是整数。听起来相对简单,但我遇到了错误。解决方法
最简单的方法是:
select MyColumn
from MyTable
where ( MyValue = @MyParameter or @MyParameter = 3)
如果您对更好的优化感兴趣,则可以这样做,但它的维护性较差:
if (@MyParameter = 3)
select MyColumn
from MyTable
else
select MyColumn
from MyTable
where MyValue = @MyParameter
如果我被迫实现此功能,那么我可能会这样做,只是为了使事情变得清楚:
declare @AllRecords nchar(1)
if (@MyParameter = 3)
set @AllRecords = N\'Y\'
else
set @AllRecords = N\'N\'
select MyColumn
from MyTable
where (MyValue = @MyParameter or @AllRecords = N\'Y\')
希望我永远不必实现以这种方式混合标志和数据值的系统。
更新
这是一个可以满足您扩展需求的版本(我认为这需要SQL Server的较新版本):
declare @SelectedLevels table (LevelId int not null primary key)
if @LevelId = 3
insert into @SelectedLevels (LevelId) values (1),(2)
else if @LevelId = 5
insert into @SelectedLevels (LevelId) values (0),(1),(2)
else
insert into @SelectedLevels (LevelId) values (@LevelId)
select mt.MyColumn
from MyTable mt
inner join @SelectedLevels sl on sl.LevelId = MyTable.LevelId
,尝试这个:
SELECT *
FROM <YOUR_TABLE>
WHERE
(
<YOUR_COLUMN> = @InputValue OR
3 = @InputValue
)
其中@InputValue是发送到查询的参数的名称。
,if @Param = 3
begin
select *
from @T
end
else
if @Param = 2
begin
select *
from @T
where id in (0,1)
end
else
begin
select *
from @T
where id = @Param
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。