1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
WITH MaTable AS(
SELECT 'A1A1A' AS Groupe, 2 AS NoId, 327 AS Pb, 'bbb' AS Code FROM dual union ALL
SELECT 'A1A1A' , 3 , NULL , 'ccc' FROM dual union ALL
SELECT 'A1A1A' , 5 , 349 , NULL FROM dual union ALL
SELECT 'B2B2B' , 2 , 222 , 'bbb' FROM dual union ALL
SELECT 'B2B2B' , 3 , 333 , 'ccc' FROM dual union ALL
SELECT 'B2B2B' , 4 , 444 , 'ddd' FROM dual union ALL
SELECT 'B2B2B' , 5 , 555 , 'eee' FROM dual union ALL
SELECT 'B2B2B' , 6 , 666 , 'fff' FROM dual
),
-- Sequence complète de référence
SEQ AS(
SELECT LEVEL AS NoID FROM dual CONNECT BY LEVEL <= 6
),
-- Séquences manquantes
MissingSEQ AS(
SELECT Groupe, SEQ.NoID, null as Pb, null as Code
FROM (SELECT distinct Groupe from MaTable) a, SEQ
WHERE not exists (SELECT null FROM MaTable b WHERE b.NoID=SEQ.NoID AND a.Groupe=b.Groupe)
ORDER BY 1,2
)
--select * from MissingSEQ;
SELECT MissingSEQ.Groupe
,MissingSEQ.NoID
,(SELECT Pb
FROM MaTable
WHERE MaTable.Groupe=MissingSEQ.Groupe
AND MaTable.NoID=nvl((Select max(MaTable.NoID) from MaTable where MaTable.Groupe=MissingSEQ.Groupe and MaTable.NoID<MissingSEQ.NoID)
,(Select max(MaTable.NoID) from MaTable where MaTable.Groupe=MissingSEQ.Groupe))
) AS Pb
,(SELECT Code
FROM MaTable
WHERE MaTable.Groupe=MissingSEQ.Groupe
AND MaTable.NoID=nvl((Select max(MaTable.NoID) from MaTable where MaTable.Groupe=MissingSEQ.Groupe and MaTable.NoID<MissingSEQ.NoID)
,(Select max(MaTable.NoID) from MaTable where MaTable.Groupe=MissingSEQ.Groupe))
) AS Code
FROM MissingSEQ
;
GROUPE NOID PB CODE
------ ---------- ---------- ----
A1A1A 1 349
A1A1A 4 ccc
A1A1A 6 349
B2B2B 1 666 fff |
Partager