IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Requête pour une recherche sur les doublons uniquement


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2023
    Messages : 4
    Par défaut Requête pour une recherche sur les doublons uniquement
    Bonjour;
    Voilà plusieurs jours que je cherche une solution à mon problème, tout ce que j'ai trouvé sur internet ou sur le forum ne me conviens pas.
    Je pense que c'est assez simple mais comme je suis toujours débutant je n'ai pas trouvé de solution.

    Je voudrais faire une requête qui me permettrait d'afficher uniquement les doublons d'un numéro de série (objet.n_SERIE).
    Il y a par exemple plusieurs utilisateurs avec un PC et s'il y a un problème de saisi de numéro de série en doublon, la requête devrait l'afficher.
    Voilà un exemple de données

    Utilisateur | Numéro de série
    ___________________________
    Marc | 12345
    Antoine | 78945
    Marie | 12345

    Après la requête :

    Utilisateur | Numéro de série
    ___________________________
    Marc | 12345
    Marie | 12345


    J'ai réalisé un code que j'ai simplifié pour ma demande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT utilisateur.n_utile as "Utilisateur",catalogue.c_type as "Type", objet.n_SERIE as "N_Serie"
    from og.objet
    left outer join og.utilisateur on (objet.c_utile = utilisateur.c_utile)
    left outer join og.catalogue on (objet.c_ref = catalogue.c_ref)
    where catalogue.c_type like '%PC%'
    ORDER BY objet.n_SERIE;
    En espérant avoir été assez clair
    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 449
    Par défaut
    Bonjour,
    Juste un point pour éclaircir: est-ce que plusieurs lignes de la table objet peuvent avoir la même valeur pour N_SERIE, ou est-ce que plusieurs utilisateurs peuvent être associés à une mêm ligne de objet ?

    Dans le premier cas tu peux faire nue jointure de la table objet sur elle-même pour trouver les doublons:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select *
    from objet as o1
    inner join objet as o2
    on o1.n_serie = o2.n_serie and o1.ident < o2.ident

    Tu peux aussi utiliser une CTE:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    with doublons as
    (
    select objet.n_serie,count(*)
    from objet
    group by n_serie
    having count(*) > 1
    )
    SELECT utilisateur.n_utile as "Utilisateur",catalogue.c_type as "Type", objet.n_SERIE as "N_Serie"
    from og.objet
    inner join doublons on doublons.n_serie = objet.n_serie
    left outer join og.utilisateur on (objet.c_utile = utilisateur.c_utile)
    left outer join og.catalogue on (objet.c_ref = catalogue.c_ref)
    where catalogue.c_type like '%PC%'
    ORDER BY objet.n_SERIE;

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2023
    Messages : 4
    Par défaut
    Re Bonjour,

    Merci tatayo, j'ai essayé ta deuxième solution et ca fonctionne comme je voulais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with doublons as
    (
    select objet.n_serie,count(*)
    from objet
    group by n_serie
    having count(*) > 1
    )
    SELECT utilisateur.n_utile as "Utilisateur",catalogue.c_type as "Type", objet.n_SERIE as "N_Serie"
    from og.objet
    inner join doublons on doublons.n_serie = objet.n_serie
    left outer join og.utilisateur on (objet.c_utile = utilisateur.c_utile)
    left outer join og.catalogue on (objet.c_ref = catalogue.c_ref)
    where catalogue.c_type like '%PC%'
    ORDER BY objet.n_SERIE;
    Merci à toi !

  4. #4
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut Fonction Listagg
    Bonjour,

    J'ai créé un exemple poUr les données ci-dessous

    r."TABR_U5018" r."CRIT1"
    E0112 A
    E0112 C
    E0112 R
    E0112 S
    E0112 V
    E0112 Z

    Voici le code sql, doublé pour te montrer l'impact du order by

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
       r."TABR_U5018" "Code"
    , LISTAGG(r."CRIT1", ' | ') WITHIN GROUP (ORDER BY r."TABR_U5018", r."CRIT1") "Util"
    from reqE0112 r 
    GROUP BY r."TABR_U5018"
    ORDER BY r."TABR_U5018"
    ;

    "Code" "Util"
    "E0112" "A | C | R | S | V | Z"

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
       r."TABR_U5018" "Code"
    , LISTAGG(r."CRIT1", ' | ') WITHIN GROUP (ORDER BY r."TABR_U5018", r."CRIT1" desc) "Util"
    from reqE0112 r 
    GROUP BY r."TABR_U5018"
    ORDER BY r."TABR_U5018"
    ;

    "Code" "Util"
    "E0112" "Z | V | S | R | C | A"

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 630
    Billets dans le blog
    10
    Par défaut
    @Vgran : il n'est pas nécessaire de s'embêter avec les doubles quotes quand les noms d'objets (tables, colonnes...) ne sont pas des mots réservés SQL

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 449
    Par défaut
    @Vgran: je ne vois pas trop le rapport avec la question initiale.
    Tu ne te serais pas trompé de discussion par hasard ?

    Tatayo.

  7. #7
    Membre averti
    Femme Profil pro
    requêteur sur base oracle avec SQL DEVELOPPER
    Inscrit en
    Avril 2022
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : requêteur sur base oracle avec SQL DEVELOPPER

    Informations forums :
    Inscription : Avril 2022
    Messages : 17
    Par défaut
    Bonjour à tous,
    Tatayo,
    Il est vrai que je n'aurais pas ramené une ligne par enregistrement comme illustré par le demandeur :
    Marc | 12345
    Marie | 12345
    Mais j'aurais obtenu 12345 | Marc | Marie ce qui une fois distribué dans EXCEL par exemple, en spécifiant le séparateur "|" permettait, du moins je l'ai cru, de répondre au besoin, soit, donner la liste des utilisateurs utilisant un même code.
    Mais peut-être n'ai je rien compris au besoin, ce en quoi je suis désolée d'avoir pollué la discussion
    Bonne journée à tous.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    WITH 
    T AS
    (
    SELECT utilisateur.n_utile as Utilisateur,
           catalogue.c_type as "Type",
           objet.n_SERIE as N_Serie, 
    	   ROW_NUMBER() OVER(PARTITION BY objet.n_SERIE ORDER BY utilisateur.n_utile) AS N 
    from   og.objet
           left outer join og.utilisateur 
    	      on (objet.c_utile = utilisateur.c_utile)
           left outer join og.catalogue 
    	      on (objet.c_ref = catalogue.c_ref)
    where  catalogue.c_type like '%PC%'
    ) 
    SELECT Utilisateur, "Type", N_Serie
    FROM   T
    WHERE  N = 1
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête pour une recherche sur champs multiple d'une table
    Par fred777 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/10/2008, 16h33
  2. [MySQL] Juste pour une information sur les boucle ?
    Par miccheld dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/10/2007, 14h32
  3. Réponses: 19
    Dernier message: 12/04/2007, 15h11
  4. Syntaxe pour une recherche sur 2 listes déroutantes
    Par christ-94 dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 17h51
  5. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo