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

Requêtes MySQL Discussion :

Regroupement de résultats sur une seul ligne


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut Regroupement de résultats sur une seul ligne
    Bonjour à tous, et merci d'avance pour votre aide
    J'ai le pb suivant ... qui me bloque depuis trop de temps, le mieux est de l'expliquer par un exemple.
    J'ai une table qui contient les champs suivants :
    Client GroupProduit SousGroupeProduit Période CA
    avec par exemple les valeurs
    Toto, Voiture, Freins, 201011, 134
    Toto, Maison, Porte, 200911, 267
    Toto, Voiture, Freins, 200911, 389
    Toto, Voiture, roue, 201011, 471

    Sachant qu'il n'y a que 2 périodes dans ma table (année n et année n-1), je cherche à avoir le résultat suivant au travers d'une vue
    Client GroupProduit SousGroupeProduit Période1 CA1 Période2 CA2
    Toto, voiture, freins, 200911, 389, 201011, 134
    Toto, voiture, roue, 200911, 0,201011, 471
    Toto, maison, porte, 200911, 267, 201011, 0

    Toutes mes requêtes me sortent la première ligne ... mais pour avoir les 2 autres ... ben j'y arrive pas. La solution est surement dans les unions, mais je n'ai pas encore trouvé.
    Si qq'un a une petite idée, c'est avec plaisir.
    Merci encore.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Pour faciliter ma jointure, j'ai rajouter à ma table un champs ID qui est unique pour le triplet : client, groupeproduit, sousgroupeproduit.
    je voudrait donc que pour cet ID, il me donne le CA de la période1, et le CA de la période2 (si les 2 CA sont présent), et sinon qu'il me mette 0 dans la colonne ou le CA n'existe pas.

    Avec l'ajout de l'id, cette requête me renvoie tjs les lignes aillant du ca pour les 2 périodes ... mais pas celles avec un CA sur une des 2


    select a.client, a.groupproduit, a.sousgroupeproduit, b.ca ca2009, a.ca ca2010

    from matable a cross join matable b on a.id=b.id
    where

    a.periode=date_format((curdate() + interval -(1) month),'%Y%m') and
    b.periode=date_format((curdate() + interval -(13) month),'%Y%m') and
    order by a.nomclient, a.groupe, a.sousgroupe

    A bientôt ...

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Ce que tu cherches à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du logiciel qui utilise la BDD.

    Les colonnes Client, Groupe et SousGroupe ne devrait contenir que des identifiants faisant références à ceux des tables externes correspondantes et pas le nom.

    Comme tu n'as que deux périodes, tu peux faire la requête suivante mais plus tu auras de périodes et plus tu auras de jointures. Il te faudra modifier ta requête à chaque fois que tu ajouteras une période.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t1.Client, t1.GroupProduit, t1.SousGroupeProduit,
      t1.Période AS Période1,
      t1.CA AS CA1,
      t2.Période AS Période2,
      COALESCE(t2.CA, 0) AS CA2
    FROM ta_table t1
    LEFT OUTER JOIN t2 
      ON t2.Client = t1.Client
      AND t2.GroupProduit = t2.GroupProduit
      AND t2.SousGroupeProduit = t1.SousGroupeProduit

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse, mais ça me multiplie les lignes et ne me mets pas des 0 lorsqu'il n'y a pas de CA pour la période. N'y aurait-il pas une tite modif à faire? Merci encore pour ton aide .. je me sens moins seul dans ma galère !!!

Discussions similaires

  1. Afficher les résultats sur une seule ligne
    Par arnovodao dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/07/2013, 14h49
  2. Regroupement d'informations sur une seule ligne
    Par KiteAtao dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 21/03/2011, 08h27
  3. Requête pour résultats sur une seule ligne
    Par jobine2011 dans le forum Développement
    Réponses: 3
    Dernier message: 05/01/2011, 17h06
  4. Plusieurs résultats sur une seule ligne
    Par Morphorpse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2007, 19h36
  5. Relation un à n : mettre les résultats sur une seule ligne
    Par juju33 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 13/08/2007, 09h57

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