У меня есть таблица с данными типа.Выберите минимальное число в диапазоне
ItemCode
1000
1002
1003
1020
1060
Я пытаюсь написать SQL заявление, чтобы получить минимальное количество (Артикул), который не в этой таблице, и он должен быть в состоянии получить следующий наименьший номер после того, как предыдущий минимальный заказ ID был включен в таблице, но также пропустить числа, которые уже находятся в БД. Я хочу получать только 1 результат каждый раз, когда выполняется запрос.
Таким образом, он должен получить 1001
в качестве первого результата, основанного на таблице выше. После того, как ItemCode = 1001
был вставлен в таблицу, следующий результат должен быть равен 1004
, поскольку 1000
до 1003
уже существует в таблице.
Основываясь на всем, что я видел в Интернете, я думаю, мне нужно использовать цикл While для этого. Вот мой код, над которым я все еще работаю.
DECLARE @Count int
SET @Count= 0
WHILE Exists (Select ItemCode
from OITM
where itemCode like '10%'
AND convert(int,ItemCode) >= '1000'
and convert(int,ItemCode) <= '1060')
Begin
SET @COUNT = @COUNT + 1
select MIN(ItemCode) + @Count
from OITM
where itemCode like '10%'
AND convert(int,ItemCode) >= '1000'
and convert(int,ItemCode) <= '1060'
END
Я чувствую, что должен быть более простой способ достичь этого. Есть ли способ для меня, чтобы сказать ...
выбрать минимальное число между 1000 и 1060, который не существует в таблице X
EDIT: Создание новой таблицы не вариант в моем case
Final Редактировать: Спасибо, ребята! Я понял. Вот мой последний запрос, который возвращает именно то, что я хочу. Я знал, что делаю это слишком сложно без причины!
With T0 as (select convert(int,ItemCode) + row_number() over (order by convert(int,ItemCode)) as ItemCode
from OITM
where itemCode like '10%'
AND convert(int,ItemCode) >= '1000'
And convert(int,ItemCode) <= '1060')
Select MIN(convert(varchar,ItemCode)) as ItemCode
from T0
where convert(int,ItemCode) Not in (Select convert(int,ItemCode)
from OITM
where itemCode like '10%'
AND convert(int,ItemCode) >= '1000'
and convert(int,ItemCode) <= '1060');
Вам не нужно создавать таблицу, вы можете использовать 'CTE' или' sys.columns' в соответствии с решением, предоставляемым wewesthemenace – ughai