SQL-запрос для выбора равно, или меньше, или больше, чем

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-server-2008

Вопрос:

Предполагая, что существует таблица t со следующими столбцами: Code int, Имя nvarchar(50).

Я хотел бы запросить в таблице наиболее подходящую строку для данного кода c. Наиболее подходящие критерии (в порядке важности):

  • 1) выберите строку, код которой соответствует c
  • 2) выберите строку, код которой больше, чем 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"
 

Комментарии:

1. опубликуйте некоторые примеры данных и ожидаемый результат, вашу попытку.

2. Все еще не ясно в вашей таблице ввода и наборе результатов вывода. Не могли бы вы предоставить это?

Ответ №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; вам нужна одна наиболее подходящая запись. Так что выбирайте 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);