假设有一个包含以下列的表t:Code int,Name nvarchar(50)。
我想查询表中给定代码c的最匹配行。 “最匹配”标准(按重要性排序):
代码将存储在存储过程中。
有人可以建议如何完成上述工作。
感谢。
样本数据和预期结果:
1, "Name1"
2, "Name2"
4, "Name4"
5, "Name5"
If c=2, result: 2,"Name2"
If c=3, result: 4,"Name4"
if c=6, result: 5,"Name5"
答案 0 :(得分:1)
我按两个标准对行进行排序 - 与目标数字的绝对距离以及它是否大于或小于它,然后选择最上一行。例如,假设目标代码是4:
SELECT TOP 1 *
FROM t
ORDER BY ABS(code - 4) ASC, CASE WHEN code > 4 THEN 1 ELSE 0 END DESC
答案 1 :(得分:1)
这是前1个查询;你想要一个最匹配的记录。因此,请在TOP 1
中按所需顺序选择ORDER BY
。
select top 1 *
from mytable
order by
case when code = @code then 1
when code > @code then 2
else 3
end,
abs(code - @code);