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
|
INSERT INTO anomalie
SELECT CODCOL,CODAGT,NOMPAT,PRENOM,DTENAI, DEPCOL FROM (
WITH matable AS
(
SELECT 59350 AS codcol, 12765 AS codagt, 'BER' AS nompat, 'JP' AS prenom, to_date('02/05/1950', 'dd/mm/yyyy') AS dtenai, NULL AS depcol FROM dual union ALL
SELECT 59350 , 6614 , 'CHE' , 'ER' , to_date('01/09/1962', 'dd/mm/yyyy') , to_date('30/08/1990', 'dd/mm/yyyy') FROM dual union ALL
SELECT 59350 , 6614 , 'CHE' , 'ER' , to_date('01/09/1962', 'dd/mm/yyyy') , to_date('19/10/2002', 'dd/mm/yyyy') FROM dual union ALL
SELECT 59350 , 28365 , 'DEU' , 'ROM' , to_date('06/11/1987', 'dd/mm/yyyy') , to_date('30/06/2002', 'dd/mm/yyyy') FROM dual union ALL
SELECT 59350 , 28365 , 'DEU' , 'ROM' , to_date('06/11/1987', 'dd/mm/yyyy') , NULL FROM dual union ALL
SELECT 59350 , 22733 , 'PI' , 'NI' , to_date('08/09/1980', 'dd/mm/yyyy') , NULL FROM dual union ALL
SELECT 59350 , 22733 , 'PI' , 'NI' , to_date('08/09/1980', 'dd/mm/yyyy') , NULL FROM dual
)
SELECT CODCOL,CODAGT,NOMPAT,PRENOM,DTENAI, DEPCOL,
CASE WHEN ((DEPCOL IS NOT NULL AND NB_LIG = NB_LIG_OK) OR (DEPCOL IS NULL AND NB_LIG > 1 AND NB_LIG_OK = 0))
THEN 'A GARDER'
ELSE 'A SUPPRIMER'
END status
FROM
(
SELECT codcol, codagt, nompat, prenom, dtenai, depcol,
COUNT(0) OVER (PARTITION BY NOMPAT, PRENOM, DTENAI) nb_lig,
SUM(DECODE(DEPCOL,NULL,0,1)) OVER (PARTITION BY NOMPAT, PRENOM, DTENAI) nb_lig_ok
FROM matable
)
)
WHERE status = 'A SUPPRIMER'
GROUP BY CODCOL,CODAGT,NOMPAT,PRENOM,DTENAI; |