-5

私は int データ型列を No として持っており、テーブルにない No 番号を見つけたいと思っています。

例: 1,2,3,7,8,9

答え = 4,5,6

前もって感謝します。

4

3 に答える 3

2

単純な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で試すことができます

于 2012-10-22T06:06:48.890 に答える
1

数字の表を使用できます

ここ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
于 2012-10-22T06:06:26.603 に答える
1

フォローしてみてください -

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
于 2012-10-22T05:48:30.367 に答える