Situatie
Avem nevoie uneori sa gasim valorile lipsa (sau plaja de valori lipsa dintr-o coloana de tip integer)
Pt aceasta situatie am creat un script care parcurge o coloana de tip INTEGER si intoarce valorile lipsa din aceasta coloana , mai exact intoarce, pt fiecare serie de numere lipsa, numarul de start al seriei lipsa, numarul de sfarsit al seriei lipsa si lungimea seriei care lipseste.
In scriptul de mai jos trebuie doar sa inlocuiti NUMELE TABELEI si NUMELE COLOANEI din tabela respectiva.
Cele doua locuri in care se fac inlocuirile sunt marcate cu comentarii pt a fi vizibile.
Solutie
WITH TABELA AS
(
SELECT
COLOANA1 AS ID, — AICI se pune NUMELE COLOANEI
RowNum = ROW_NUMBER() OVER (ORDER BY COLOANA1)
FROM
TABELA_X1 — AICI se pune NUMELE TABELEI
),
RANG AS
(
SELECT
*,
DENSE_RANK() OVER (ORDER BY ID – RowNum) As SERIA1
FROM TABELA
),
GASITE AS
(
SELECT
*,
COUNT(*) OVER (PARTITION BY SERIA1) AS SERIA2
FROM RANG
),
LIPSA AS
(
SELECT
MinID = MIN(ID),
MaxID = MAX(ID),
SERIA1
FROM
GASITE
GROUP BY SERIA1
)
SELECT
InceputGap = (a.MaxID + 1),
SfarsitGap = (b.MinID – 1),
NrLipsa = ((b.MinID – 1) – a.MaxID)
FROM
LIPSA a
INNER JOIN
LIPSA b ON a.SERIA1 + 1 = b.SERIA1
ORDER BY
InceputGap
Leave A Comment?