sql - SQL中的排名匹配
问题描述
我有一个 SQL 存储过程,它将姓名和电话作为输入参数,并将 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
在这种情况下,它返回 1 和 3 的 ID,但我希望它只返回 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 标准fetch first 1 row only
。有些拼写limit
。一些select top (1)
.
推荐阅读
- r - 轴标签中的绝对值
- sql - 如何将连续日期合并为一个日期?
- c - 我试图用 C 编写一个 Discomfort Index 程序,但我卡住了
- tensorflow - rtx 3090 上的 Tensorflow 1.14 性能问题
- flutter - Auto_route 无法使用生成的文件:没有名为“reportsRouteUpdateToEngine”的名称参数
- apache-spark - 在 EMR 集群上配置 Livy log4j 属性
- python - 使用 docplex CP Optimizer 的 ILP 问题(没有从本地求解器进程中读取)
- c++ - 如何在 C++ COM STA 中的 WebView2 接口上等待对 ExecuteScript 的调用完成
- google-apps-script - 将一系列单元格从一行移动到另一个谷歌工作表并将其删除
- python - Pandas 时间戳在强制转换为唯一列表时转换为整数 - 可能的错误?