T-SQL に次の列があります。
1
2
3
7
10
シーケンス 4,5,6 および 8,9 の欠落した数字を検出するための関数を SQl に持っています。
合体しますが、わかりません。オリエンテーションでありがとう
T-SQL に次の列があります。
1
2
3
7
10
シーケンス 4,5,6 および 8,9 の欠落した数字を検出するための関数を SQl に持っています。
合体しますが、わかりません。オリエンテーションでありがとう
これを試すことができます:
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
次のクエリは、各シーケンスの開始位置と欠落している番号を特定します。
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
これは、テーブル内の次の値を取得するために相関サブクエリを使用しています。
これが遅い答えであることは知っていますが、再帰テーブル式を使用してテーブルの最小値と最大値の間の欠損値を取得するクエリを次に示します。
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)