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

MS SQL Server Discussion :

Pb de boublon, triplon, etc


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 88
    Par défaut Pb de boublon, triplon, etc
    Bonjour,

    Je suis sous MS SQL 2000 et je débute dans ce langage.

    J'ai trois tables :
    CLIENT : id_client, nom
    AFFAIRE : id_affaire, id_client, ref, nombre1, nombre2
    CHANTIER : id_chantier, id_client, quantite

    Avec les enregistrement suivants :

    Client :
    id_client Nom
    1 TITI
    2 TATA
    3 TOTO

    Affaire :
    id_affaire id_client ref nombre1 nombre2
    1 1 LILLE 0 10
    2 1 LILLE 5 20
    3 1 LILLE 2 15
    4 2 PARIS 1 110
    5 2 PARIS 8 120
    6 3 LYON 3 210
    7 3 LYON 0 220
    8 3 LYON 4 215

    Chantier :
    id_chantier id_client quantite
    1 1 1500
    2 1 50
    3 2 2000
    4 2 100
    5 2 300
    6 3 500

    J'aiemerais, avec un seul SELECT établir une liste des clients avec pour chaque client l'addition du nombre2 des affaires (du client) pour lesquelles nombre1 est > 0, et également la somme des quantité des chantier du client.
    Trier par ordre alphabétique (ce point là je sais faire )

    Exemple : voici le résultat final que cela donnerais suivant l'exemple de données ci-dessus :

    Nom_client Somme_nombre2_AFFAIRE Somme_quantite_chantier
    TATA 230 2400
    TITI 45 1550
    TOTO 645 500

    Pour l'instant ce que je fais n'ai pas bon car pour chaque client il me multiplie Somme_nombre2_AFFAIRE du client par le nombre d'enregistrement de CHANTIER que possède le client.

    Merci pour votre aide.

    Alf

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    bonjour,

    vous pouvez poster votre requête ? ça devrait permettre d'aller plus vite pour pour apporter une réponse.
    merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 88
    Par défaut
    Bonjour,

    Voici la requête que j'ai faite et qui ne fonctionne pas que je le voudrais :

    SELECT
    CL.Nom,
    SUM(AF.nombre2),
    SUM(CH.quantite)
    FROM CLIENT CL, AFFAIRE AF, CHANTIER CH
    WHERE CL.Id_Client = AF.Id_Client
    AND CL.Id_Client = CH.Id_Client
    AND AF.Nombre1 > 0
    GROUP BY CL.Nom
    ORDER BY CL.Nom

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    je pense que ton problème de doublon vient de ta clause GROUP BY. La clé étrangère de tes tables étant id_client, c'est cette information qui doit être mentionné dans ton GROUP BY avec la référence aux tables où elle est clé étrangère.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
    CL.Nom,
    SUM(AF.nombre2),
    SUM(CH.quantite)
    FROM CLIENT CL, AFFAIRE AF, CHANTIER CH
    WHERE CL.Id_Client = AF.Id_Client
    AND CL.Id_Client = CH.Id_Client
    AND AF.Nombre1 > 0
    GROUP BY AF.Id_Client,CH.Id_Client
    ORDER BY CL.Nom

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 88
    Par défaut
    Madinico, merci pour ta proposition mais elle ne fonctionne pas plus.

    Bon, finalement j'ai fait ceci :
    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
    18
     
    SELECT
      CL.NOM,
      NB  = (SELECT
                  SUM(AF.nombre2)
                FROM AFFAIRE AF, CLIENT C
                WHERE C.Id_Client = AF.Id_Client
                AND   C.Id_Client = CL.Id_Client
                AND  AF.Nombre1 > 0
                GROUP BY C.Nom),
      NBCH = (SELECT
                  SUM(CH.Quantite)
                FROM CHANTIER CH, CLIENT C2
                WHERE C2.Id_Client = CH.Id_Client
                AND   C2.Id_Client = CL.Id_Client
                GROUP BY C2.Nom)
    FROM CLIENT CL
    ORDER BY CL.Nom
    Le seul inconvenient c'est qu'il me met des "null" si le client n'a pas d'affaire ou de chantier. Mais c'est pas bien grâve.

    Si qq à une solution plus élégante...

    Je clos le poste.

    Merci à tous


    Alf

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

Discussions similaires

  1. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  2. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27
  3. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  4. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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