我有一个SQL存储过程,该过程将名称和电话作为输入参数,并将返回ID作为输出参数。如果找到“名称”上的匹配项,我想返回ID,但如果没有找到“电话”上的匹配项,我想返回ID。如果我使用OR语句,它将返回两个ID,但是我只需要返回一个ID。
ID Name Phone
---------------------------
1 Dag 5070000000
2 Adam 2020000000
3 John 3010000000
@name ='Dag'
@phone ='3010000000'
Select ID From Tbl Where Name=@name OR Phone=@phone
在这种情况下,它同时返回ID 1和3,但是我希望它仅返回ID 1,因为对我来说,名称匹配比电话匹配更重要。请帮忙。
答案 0 :(得分:2)
如果您希望排成一行,可以执行以下操作:
select ID
from Tbl
where Name = @name OR Phone = @phone
order by (case when name = @name and phone = @phone then 1
when name = @name then 2
else 3
end)
fetch first 1 row only;
注意:并非所有数据库都能识别ISO / ANSI标准fetch first 1 row only
。有人将其拼写为limit
。一些select top (1)
。