SQL中的排序匹配

SQL中的排序匹配,sql,Sql,我有一个SQL存储过程,它将name和phone作为输入参数,将returnid作为输出参数。若在姓名上找到匹配项,我想返回ID,但若在电话上找不到匹配项,则返回ID。如果我使用OR语句,它将返回两个id,但我只需要返回一个id ID Name Phone --------------------------- 1 Dag 5070000000 2 Adam 2020000000 3 John

我有一个SQL存储过程,它将name和phone作为输入参数,将returnid作为输出参数。若在姓名上找到匹配项,我想返回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,因为对我来说,名称匹配比电话匹配更重要。请帮助。

如果您需要一行,可以执行以下操作:

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标准
仅获取前1行
。有些人拼写它
limit
。有些
选择顶部(1)

如果需要一行,可以执行以下操作:

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标准
仅获取前1行
。有些人拼写它
limit
。一些
选择顶部(1)

用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。