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

Langage SQL Discussion :

Pb requête regroupement


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Pb requête regroupement
    Salut tout le monde,

    Voici le pb que j'ai à résoudre :

    J'ai une table CONTRAT avec deux champs : num_contrat et num_produit

    Exemple :

    num_contrat num_produit
    --------------- --------------
    01--------------CC01
    01--------------CC02
    01--------------VC01
    02--------------CC03
    02--------------VC04
    03--------------CC06

    On voit ici qu'un contart peut apparaître plusieurs fois, autrement dit un même contart peut concerner plusieurs produits différents.

    Je souhaite créer une requête qui me renvoie toutes les lignes en doublons sur le numéro de contrat.
    Là pas de problème, je fais un GROUP BY sur le num_contart et je garde les groupes avec au moins 2 lignes (HAVING COUNT(*)>1).

    Ce qui donne :

    num_contrat num_produit
    --------------- --------------
    01--------------CC01
    01--------------CC02
    01--------------VC01
    02--------------CC03
    02--------------VC04

    Mais une ligne dont le num_produit commence par ('V' LIKE 'V*') n'est pas considérer comme un doublon.

    Ce qui donne :

    num_contrat num_produit
    --------------- --------------
    01--------------CC01
    01--------------CC02
    02--------------CC03


    Mon problème c'est que ici après après supprimer mon "faut doublon"
    le produit 02 ne doit pas être considérer comme doublon puisqu'il n'y a qu'une ligne ligne.


    Donc je souhaite avoir une requête qui me renvoie toutes les lignes dont le groupe (sur le num_contrat) possède au moins deux lignes, en exluant les lignes dont un num_produit comme par la lette 'V'.


    Voilà, désolé pour la longueur du post, mais je suis bloqué depuis ce matin!!!!


    Merci d'avance

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Peut etre devrais tu faire ton regroupement sur la table en ayant exclu les valeurs qui te derangent d'abord :

    select * from
    (select * from contrat
    where num_produit not like 'V%') as contrat_sans_v
    group by num_contrat having count(*)>1

    Je ne sais pas si elle fonctionne car, je n'ai rien pour tester ca actuellement, mais essais la, dis moi si c'est ca que tu voulais (en la modifiant au cas ou j'aurais fait une erreur dans la syntaxe)

    Bon courage

  3. #3
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse.
    Non ça marche pas, car la sélection de tous les champs (*) lors d'un regroupement ne marche pas.
    Là tu me diras il suffit de mettre num_contrat à la place.
    Mais le problème est que un numéro de contrat n'est pas suffisant pour identifier un enrengistrement. Et celam'empêche de faire une nouvelle sélection sur le num_contrat+num_produit, puisque je n'ai pas le num_produit.

    As-tu une autre piste?
    Merci d'avance.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 126
    Points : 108
    Points
    108
    Par défaut
    SELECT numcontrat
    FROM table
    WHERE numproduit not like 'V*'
    GROUP BY numcontrat
    HAVING count(*)>1;

Discussions similaires

  1. Problème de requête regroupement
    Par auriolbeach dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/07/2006, 17h23
  2. [Access] Requête regroupement et champs supplémentaires
    Par olivier03 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/02/2006, 11h59
  3. [Requête] Regroupement par mois en cours
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2006, 09h36
  4. optimisation requête-regroupement info
    Par mariobedard dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/09/2005, 15h10
  5. [DB2]Requête regroupement par intervals
    Par sm dans le forum DB2
    Réponses: 8
    Dernier message: 01/09/2004, 17h19

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