J'écris cette requête pour trouver des enregistrements CTN en double dans table1. Donc, je pense que si le CTN_NO apparaît plus de deux fois ou plus, je veux qu'il soit affiché dans ma sortie de l'instruction SELECT * en haut.
J'ai essayé la logique de sous-requête suivante mais j'ai besoin de pulls
SELECT *
table1
WHERE S_IND='Y'
and CTN_NO = (select CTN_NO
from table1
where S_IND='Y'
and count(CTN_NO) < 2);
order by 2
En utilisant:
SELECT t.ctn_no
FROM YOUR_TABLE t
GROUP BY t.ctn_no
HAVING COUNT(t.ctn_no) > 1
... vous montrera le ctn_no
valeur (s) contenant des doublons dans votre table. L'ajout de critères au WHERE vous permettra de régler davantage les doublons:
SELECT t.ctn_no
FROM YOUR_TABLE t
WHERE t.s_ind = 'Y'
GROUP BY t.ctn_no
HAVING COUNT(t.ctn_no) > 1
Si vous souhaitez voir les autres valeurs de colonne associées au doublon, vous devrez utiliser une jointure automatique:
SELECT x.*
FROM YOUR_TABLE x
JOIN (SELECT t.ctn_no
FROM YOUR_TABLE t
GROUP BY t.ctn_no
HAVING COUNT(t.ctn_no) > 1) y ON y.ctn_no = x.ctn_no
Essayez cette requête. Elle utilise la fonction analytique SUM:
SELECT * FROM
(
SELECT SUM(1) OVER(PARTITION BY ctn_no) cnt, A.*
FROM table1 a
WHERE s_ind ='Y'
)
WHERE cnt > 2
Je ne sais pas pourquoi vous identifiez un enregistrement comme doublon si le ctn_no se répète plus de 2 fois. Pour moi, il se répète plus d'une fois, c'est un doublon. Dans ce cas, changez la partie las de la requête en WHERE cnt > 1