Как я могу упростить этот запрос? Мне нужно сравнить значение переменной temp со значением столбца нескольких строк

Мне нужно сравнить значение переменной temp со значением столбца нескольких строк и выполнить на нем операции.

| intSeqID | Value | ---------------------------- 1 | 779.40 2 | 357.38 3 | NULL 4 | NULL 5 | NULL 6 | NULL 7 | NULL 8 | NULL 9 | NULL 10 | NULL DECLARE @tmpRange NUMERIC(5,2) SELECT @tmpRange = 636 

Здесь мне нужно сравнить значение @tmpRange со значением из TABLE и выполнить на нем операции.

  IF((@tmpRange < (select ISNULL(Value,0) from @tableA intSeqID=1)) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=2))) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=3))) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=9))) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=10))) BEGIN SELECT 'All' END ELSE IF ((@tmpRange < (select ISNULL(Value,0) from @tableA intSeqID=1)) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=2))) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=3))) AND (@tmpRange< (select ISNULL(Value,0) from @tableA where intSeqID=9)))) BEGIN SELECT '10' END END 

Как я могу упростить этот запрос для сравнения значений. Или есть другой способ выбрать значения нескольких строк и сравнить их с переменной temp.

Вот один довольно простой способ сделать это:

Создание и заполнение таблицы образцов ( пожалуйста, сохраните нам этот шаг в ваших будущих вопросах)

 DECLARE @tableA as table ( intSeqID int identity(1,1), Value numeric(5,2) ) INSERT INTO @tableA VALUES (779.40), (357.38), (256.32), (NULL) 

Объявить и заполнить переменную:

 DECLARE @tmpRange numeric(5, 2) = 636 

Запрос:

 ;WITH CTE AS ( SELECT TOP 1 intSeqId FROM @TableA WHERE @tmpRange < ISNUll(Value, 0) ORDER BY Value ) SELECT CASE WHEN intSeqId = ( SELECT TOP 1 intSeqId FROM @TableA ORDER BY ISNUll(Value, 0) ) THEN 'All' ELSE CAST(intSeqId as varchar(3)) END FROM CTE 

Результат: 1 .

Смотрите демо-версию в реестре.

Мы можем попытаться реорганизовать ваш запрос с помощью агрегатов. Мы почти уходим без подзапроса, кроме одного, что необходимо для того, чтобы отличить два условия.

 SELECT CASE WHEN SUM(CASE WHEN @tmpRange < Value THEN 1 ELSE 0 END) = 4 AND @tmpRange < (SELECT Value FROM @tableA WHEREA intSeqID = 10) THEN 'All' WHEN SUM(CASE WHEN @tmpRange < Value THEN 1 ELSE 0 END) = 4 THEN '10' ELSE 'NONE' END AS label FROM @tableA WHERE intSeqID IN (1, 2, 3, 9) 

Вы хотите найти самую большую запись в Value , которая также меньше вашей переменной, правильно?

 --DECLARE @tableA TABLE (intSeqID tinyint, [Value] decimal(5,2)) --INSERT INTO @tableA SELECT 1, 400 UNION SELECT 2, 300 UNION SELECT 3, 200 --DECLARE @tmpRange decimal(5,2) = 250 SELECT TOP 1 * FROM ( SELECT TOP 1 CONCAT('', intSeqID) AS intSeqID -- Can't UNION int to varchar. FROM @tableA WHERE ISNULL([Value], 0) < @tmpRange ORDER BY intSeqID ASC UNION SELECT 'All' AS [?] ) AS T ORDER BY intSeqID ASC 
Interesting Posts

Полнотекстовый поиск с сущностью: нельзя использовать предикат CONTAINS или FREETEXT для столбца, поскольку он не является полнотекстовым индексированным

Данные на сервере Sql должны использовать Unicode?

ServiceBroker – Что такое чувство сообщений?

Как увидеть эффект запроса, который не возвращает результаты?

Обновление проблемы взаимоблокировки

Ошибка Недопустимые символы префикса или суффикса в SQL Server Management Studio

Возврат записей из 2-й таблицы, если запрос на первой таблице возвращается Нет записей

Indexed View vs Indexes on Table

Force DateTime с базой данных Entity Framework First

Невозможно использовать таблицу измерения в виде вложенной таблицы в инструментах данных SQL-сервера

Re: Вычисляемый столбец, вычитая два других столбца в SQL Server

TIMEOUT при поиске данных с SQL Server при выполнении команд обновления

Выберите максимальное количество повторяющихся UserId в таблице «ContactInfo» из выбранного UserId в таблице «UserInfo»

Создание пользовательской сборки в сборке SQL Server, не найденной в ошибке базы данных

Вставить в один столбец данные из двух столбцов

Давайте будем гением компьютера.