【问题标题】:SQL query to select equal or less than or greater thanSQL查询选择等于或小于或大于
【发布时间】:2016-10-14 18:53:01
【问题描述】:

假设有一个表 t 包含以下列:代码 int,名称 nvarchar(50)。

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

  • 1) 选择 Code 匹配 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"

【问题讨论】:

  • 发布一些示例数据和预期的结果,你的尝试。
  • 仍然不清楚您的输入表和输出结果集。你能提供吗?

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


【解决方案1】:

我会按两个标准对行进行排序 - 与目标数字的绝对距离以及它是否大于或小于它,然后只选择第一行。例如,假设目标代码为 4:

SELECT   TOP 1 *
FROM     t
ORDER BY ABS(code - 4) ASC, CASE WHEN code > 4 THEN 1 ELSE 0 END DESC

【讨论】:

    【解决方案2】:

    这是前 1 个查询;你想要一个最匹配的记录。因此,在ORDER BY 中按照所需顺序选择TOP 1

    select top 1 *
    from mytable
    order by 
      case when code = @code then 1
           when code > @code then 2
           else 3
      end,
      abs(code - @code);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-02
      • 2012-01-10
      • 2011-01-25
      • 2013-09-02
      • 1970-01-01
      • 2011-12-21
      • 2014-04-20
      • 1970-01-01
      相关资源
      最近更新 更多