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

ѕредполага¤, что существует таблица t со следующими столбцами: Code int, Name 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"

sql,sql-server,sql-server-2008,

2

Ответов: 2


1 прин¤т

я бы упор¤дочил строки по двум критери¤м: абсолютное рассто¤ние от целевого номера и больше или меньше, чем оно, и просто выберите верхнюю строку. Ќапример, если целевой код равен 4:

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

1

Ёто запрос TOP 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);
SQL, SQL-сервер, SQL-сервер-2008,
Похожие вопросы