SQL查询选择等于或小于或大于

时间:2016-10-14 18:53:02

标签: sql sql-server sql-server-2008

假设有一个包含以下列的表t:Code int,Name nvarchar(50)。

我想查询表中给定代码c的最匹配行。 “最匹配”标准(按重要性排序):

  • 1)选择代码与c
  • 匹配的行
  • 2)选择Code大于c的行(但是第一行)。例如,如果c = 4和t 包含1,2,3,5,6和7,我想选择5.
  • 3)选择一行 代码小于c。例如,如果c = 4且t包含3,2和 1,我想选择3。

代码将存储在存储过程中。

有人可以建议如何完成上述工作。

感谢。

样本数据和预期结果:

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"

2 个答案:

答案 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);