程序可以使用邮政编码或帐号接受两个输入搜索。尝试使用任何一个SQL,我正在使用sql server。
select name, city, zip, acc_number
case when zip then zip ='01111'
when acc_number then acc_number = '00007'
else NULL end as nodata
from mytable
我可能误解了案例逻辑,我想说,如果zip有价值使用zip的值并执行搜索并忽略acc_number并且当zip不是true时使用acc_number中的值,否则返回NULL
感谢您的期待!
答案 0 :(得分:1)
也许那个?它首先按zip
进行搜索。然后,如果没有记录发现union all
的第二部分按acc_number搜索。
;with _raw as (
select
name, city, zip, acc_number
from mytable
where zip ='01111'
union all
select
name, city, zip, acc_number
from mytable
where acc_number = '00007'
)
select top 1
*
from _raw
答案 1 :(得分:1)
由于您提到您已经过滤掉参数以检查您的查询是zip
还是acc_number
declare @Zip int = 07652;
declare @acc_number int;
select top 1
name, city, zip, acc_number from mytable
where
1 = case when isnull(@zip,0)!=0 and zip = @Zip then 1 else 0 end
or
1 = case when isnull(@zip,0)=0 and acc_number = @acc_number then 1 else 0 end
答案 2 :(得分:0)
这个怎么样:
select name, city, zip, acc_number
from mytable
where zip ='01111'
or acc_number = '00007'
我不确定我是否正确理解了您的问题,但这将根据邮编' 01111'进行搜索。 (并忽略acc_number),或根据acc_number' 00007'进行搜索,并忽略该zip。
如果我误解了,请告诉我。
答案 3 :(得分:0)
这样的东西?你的问题不是100%明确
select name, city, zip, acc_number
case when zip ='01111' then 'Match'
else when acc_number acc_number = '00007' then 'Match'
else 'Not match' end as nodata
from mytable
答案 4 :(得分:0)
你只需要一个条件where子句。这允许您做的是为两个参数或两个参数传递值。如果两个参数都在结果中传递,则返回的结果基于两个条件。也就是说,如果帐号是您在 AND 中传递的,则会传入邮政编码。如果您只传入一个参数,则只使用该参数来限制结果。如果您同时保留NULL
,则会返回所有记录。
declare @zip varchar(16), @acc_number varchar(16)
set @zip = null
set @acc_number = '00007'
if @zip is not null set @acc_number = null
select
name,
city,
zip,
acc_number
from
mytable
where
(zip = @zip or @zip is null)
and
(acc_number = @acc_number or @acc_number is null)