私は int データ型列を No として持っており、テーブルにない No 番号を見つけたいと思っています。
例: 1,2,3,7,8,9
答え = 4,5,6
前もって感謝します。
私は int データ型列を No として持っており、テーブルにない No 番号を見つけたいと思っています。
例: 1,2,3,7,8,9
答え = 4,5,6
前もって感謝します。
単純なSQLで:
SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
FROM sequence AS a, sequence AS b
WHERE a.id < b.id
GROUP BY a.id
HAVING start < MIN(b.id)
Sqfiddleで試すことができます
数字の表を使用できます
ここmaster..spt_values
では、 range を使用します0-2047
。これを、十分な値を持つ独自の数値テーブルに置き換えることができます。
declare @T table
(
Number int
);
insert into @T values (1),(2),(3),(7),(8),(9);
with MinMax as
(
select min(Number) as MinNumber,
max(Number) as MaxNumber
from @T
),
Number as
(
select N.Number
from master..spt_values as N
inner join MinMax as MM
on N.number between MM.MinNumber and MM.MaxNumber
where N.type = 'P'
)
select Number
from Number as N
where not exists
(
select *
from @T as T
where T.Number = N.number
)
order by N.number
フォローしてみてください -
DECLARE @TABLE TABLE (NUM INT)
INSERT INTO @TABLE
VALUES
(1)
,(2)
,(3)
,(7)
,(8)
,(9)
DECLARE @MIN INT
DECLARE @MAX INT
SELECT @MIN = MIN(NUM) + 1, @MAX = MAX(NUM) - 1 FROM @TABLE
CREATE TABLE #TMP (FIELD_NO INT)
WHILE @MIN <= @MAX
BEGIN
IF NOT EXISTS (SELECT * FROM @TABLE WHERE NUM = @MIN)
INSERT INTO #TMP (FIELD_NO) VALUES (@MIN)
SET @MIN = @MIN + 1
END
SELECT * FROM #TMP
DROP TABLE #TMP