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 et SQL. Discussion :

Lister les elements d’un groupe dans une requete: [AC-2003]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Par défaut Lister les elements d’un groupe dans une requete:
    Bonjour tout le monde,

    Je dois realiser un rapport base sur la table ci dessous mais je bloque sur la derniere etape.

    Categorie Produits SumOfVentes NomCreateur
    A Naval 9 kelly
    A transport 5 alain
    A transport 4 Bonero
    A transport 1 david
    B Construction 3 albert
    B Construction 7 jojo
    B Construction 2 yvette
    B finance 3 divine
    B finance 6 roger



    J’ai reussi a grouper par categorie, par Produits, faire la somme des ventes au niveau de chaque Produits, compter les Vendeur pour chaque Produits.
    Jusque la tout va bien. Le code utilise et le resultat obtenu sont en bas:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT MaTable.Categorie
    , MaTable.Produits
    , Sum(MaTable.Ventes) AS SumOfVentes
    , Count(MaTable.NomVendeur) AS CountOfNomVendeur
    FROM MaTable
    GROUP BY MaTable.Categorie
    , MaTable.Produits;


    Categorie Produits SumOfVentes CountOfNomVendeur
    A Naval 9 1
    A transport 10 3
    B Construction 12 3
    B finance 9 2


    Derniere Etape qui me pose probleme:
    J’aimerais inclure dans dans le resultat ci-dessus une derniere colonne qui listerait le nom et la part (contribution) de chaque Vendeur dans chaque Produit.
    Le resulat final ressemblera au tableau ci dessous:

    Categorie Produits SumOfVentes CountOfNomVendeur NomVendeur-Contribution
    A Naval 9 1 Kelly-9
    A transport 10 3 Alain-5,David-1, Bonero-4
    B Construction 12 3 Albert-3, yvette-2, jojo-7
    B finance 9 2 roger-6, divine-3




    Merci de m’aider.



    ps: j ai affiche un fichier excel qui contient les tables ci dessus vu que le contenus des tables sont distordus dans le corps de message.
    merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    Bonjour Bonero,

    A mon avis, il faut faire le SQL en 3 passes
    1ere passe : ta requête actuelle
    2ème passe : ta contribution par vendeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT MaTable.Categorie
    , MaTable.Produits
    , MaTable.NomVendeur
    , Sum(MaTable.Ventes) AS SumOfVentes
    FROM MaTable
    GROUP BY MaTable.Categorie
    , MaTable.Produits
    , MaTable.NomVendeur;
    3ème passe (et peut-être 4ème, je n'ai as vérifiée) :
    requête tableau croisé entre des 2 requêtes avec Jointure sur categorie, produit et pivot sur nomvendeur

  3. #3
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    J'ai fait ta requête en test chez moi
    Regarde si cela te convient

    1ere requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Matable.Categorie, Matable.Produits, Sum(Matable.Ventes) AS SommeDeVentes, Count(Matable.NomVendeur) AS CompteDeNomVendeur
    FROM Matable
    GROUP BY Matable.Categorie, Matable.Produits;

    2ème requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Matable.Categorie, Matable.Produits, Matable.NomVendeur, Sum(Matable.Ventes) AS SommeDeVentes
    FROM Matable
    GROUP BY Matable.Categorie, Matable.Produits, Matable.NomVendeur;

    3ème requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Requête1.Categorie, Requête1.Produits, Requête1.SommeDeVentes, Requête1.CompteDeNomVendeur, Requête2.NomVendeur, Requête2.SommeDeVentes
    FROM Requête1 INNER JOIN Requête2 ON (Requête1.Categorie=Requête2.Categorie) AND (Requête1.Produits=Requête2.Produits);

    4ème requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Sum([Requête2].[SommeDeVentes]) AS Expr1
    SELECT Requête5.[Categorie], Requête5.[Produits], Requête5.Requête1.SommeDeVentes, Requête5.CompteDeNomVendeur
    FROM Requête5
    GROUP BY Requête5.[Categorie], Requête5.[Produits], Requête5.Requête1.SommeDeVentes, Requête5.CompteDeNomVendeur
    PIVOT Requête5.[NomVendeur];

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Par défaut
    Bonjour Dumas,

    Merci de m’avoir repondu mais ce n’est pas ce que je voulais.
    Je reexplique la derniere etape sur laquelle je bloque. Le resultat final doit comporter 5 colonnes:
    Categorie, Produits, SumOfVentes, CountOfVendeur ET FINALLEMENT la colonne NomVendeur-Contribution. Cette derniere colonne sera composee de NomVendeur “espace” Ventes ( ie les ventes du NonVendeur).

    Pour etre plus explicite, voici le contenu de la derniere (ie 5ieme) colonne:

    Ligne 1 de la colonne 5:
    Kelly 9
    ' c-a-d tous ces elements doivent etre dans une meme "cellule"


    Ligne 2 de la colonne 5:
    Alain 5, David 1, Bonero 4
    ' c-a-d tous ces elements doivent etre dans une meme "cellule"


    Ligne 3 de la colonne 5:
    Albert 3, yvette 2, jojo 7
    'c-a-d tous ces elements doivent etre dans une meme "cellule"



    Ligne 4 de la colonne 5:
    roger 6, divine 3
    'c-a-d tous ces elements doivent etre dans une meme "cellule"



    merci de ton soutien.

  5. #5
    Membre émérite Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 599
    Par défaut
    Bonjour Bonero,

    Pour ton besoin, tu sors des utilisations habituelles du SQL, ce qui te demandera un traitement complexe.
    En SQL natif, le traitement risque d'être très lourd et pas forcément maintenable, car il te faudra utiliser des notions évoluées de SQL, qui ne sont pas forcément transposables avec Access (le notion de RANK, etc..)

    La solution la moins complexe à mes yeux serait de combiner des requêtes SQL avec un programme écrit en VBA utilisant DAO ou ADO. Si les notions de recordset et de programmation structurées ne te font pas peur, c'est sur cette voie que je te conseillerais de t'engager.

    Le principe :
    1. garder la requête 1 telle quelle
    2. utiliser la requête 2 en entrée du programme VBA
    3. dans le programme VBA, faire les concaténations d'enregistrement en fonction des clés d'identification à partir du recordset issu de la requête, et créér une table temporaire qui aura la même structure que la la requête 1
    4. creer une requête 3 qui fera la jointure entre la requete 1 et la table temporaire.


    Voila, je ne pense pas que l'on puisse faire plus simple

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Par défaut
    salut dumas,
    merci d avoir repondu. je sais bidouiller quelques proprietes de l'objet recordset en ADO. je vais essayer cette suggestion ce soir et je te dirai quoi.
    je savais des le depart que mon besoin n etait un truc simple a realiser. mais n hesite pas a me faire signe si entretemps tu as d'autres pistes a me suggerer.

    merci

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

Discussions similaires

  1. gerer les elements de arraylist dans une jsp
    Par souf_87 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/07/2011, 10h32
  2. Réponses: 4
    Dernier message: 18/10/2010, 09h39
  3. Lister les documents de windows dans une arbre
    Par gabcouts dans le forum WinDev
    Réponses: 1
    Dernier message: 23/08/2010, 09h12
  4. Utiliser la valeur d’un textbox dans une requete sql
    Par Developpeur19 dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/11/2008, 09h10
  5. Réponses: 2
    Dernier message: 14/06/2006, 08h53

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