SQL中的排名匹配

时间:2018-08-30 03:10:43

标签: sql

我有一个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,因为对我来说,名称匹配比电话匹配更重要。请帮忙。

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)