1

T-SQL に次の列があります。

 1
 2
 3
 7
 10

シーケンス 4,5,6 および 8,9 の欠落した数字を検出するための関数を SQl に持っています。

合体しますが、わかりません。オリエンテーションでありがとう

4

3 に答える 3

3

これを試すことができます:

DELCARE @a
SET @a = SELECT MIN(number) FROM table
WHILE (SELECT MAX(number) FROM table ) > @a
BEGIN
IF @a NOT IN ( SELECT number FROM table )
PRINT @a
SET @a=@a+1
END
于 2013-03-19T15:14:45.397 に答える
1

次のクエリは、各シーケンスの開始位置と欠落している番号を特定します。

select t.col + 1 as MissingStart, (nextval - col - 1) as MissingSequenceLength
from (select t.col,
             (select min(t.col) from t t2 where t2.col > t.col) as nextval
      from t
     ) t
where nextval - col > 1

これは、テーブル内の次の値を取得するために相関サブクエリを使用しています。

于 2013-03-19T15:44:31.470 に答える
1

これが遅い答えであることは知っていますが、再帰テーブル式を使用してテーブルの最小値と最大値の間の欠損値を取得するクエリを次に示します。

WITH CTE AS
(
    --This is called once to get the minimum and maximum values
    SELECT nMin = MIN(t.ID), MAX(t.ID) as 'nMax' 
    FROM Test t
    UNION ALL
    --This is called multiple times until the condition is met
    SELECT nMin + 1, nMax 
    FROM CTE
    WHERE nMin < nMax
)

--Retrieves all the missing values in the table.
SELECT c.nMin
FROM CTE c
WHERE NOT EXISTS
(
    SELECT ID
    FROM Test
    WHERE c.nMin = ID
)

これは、次のスキーマでテストされました。

CREATE TABLE Test
(
    ID int NOT NULL
)

INSERT INTO Test
    Values(1)

INSERT INTO Test
    Values(2)

INSERT INTO Test
    Values(3)

INSERT INTO Test
    Values(7)

INSERT INTO Test
    Values(10)
于 2015-04-29T21:05:56.510 に答える