我有一個類似數據的表。選擇一個範圍內的最小數量
ItemCode
1000
1002
1003
1020
1060
我想寫一個SQL語句來獲得的最低數量(ItemCode)未在該表中,它應該是能夠得到一個最低數,一旦前面的最小訂單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
編輯:創建一個新的表不是一個選項,我案例
最後編輯:謝謝你們!我知道了。這是我最後的查詢,返回我想要的。我知道我沒有理由讓它變得太複雜了!
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');
您不需要創建表,您可以根據wewesthemenace提供的解決方案使用'CTE'或'sys.columns' – ughai