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 :

Problème de regroupement dans requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut Problème de regroupement dans requête
    Bonjour,

    Voila comme souvent, j'arrive pas a finaliser ma requette et ca serait cool si quelqu'un pouvait m'aider:
    Voila, mon probleme se trouve dans le regroupement d'un calcul:
    en fait dans ma requette, je sélectione les champs suivants: produit, sous produit,quantité_achetée_en_kg, nombres_meules
    Il sont regroupé par le nom du produit
    Et je souhaite avoir le nombre total de meules par produit, et la qté total en kg par produit aussi, donc j'ai rajouté les expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(ACHAT.quantité_achetée_en_kg) AS qtte_Total
    , et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(ACHAT.nombre_meules) AS nbre_de_meules_tot
    .

    Mais le probleme c'est que quand je crée l'état qui correspond a cette requette, je n'obtient pas la somme par produit, mais des sommes pour chacun des sous produits donc les résultats sont tres bizard;
    est-ce que quelqu'un aurait une idée du regroupement que je dois faire afin d'avoir chacune de mes sommes pour chaque produit.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    Une solution est peut-être de faire des deux champs calculés le résultat de deux sous-requêtes.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.Produit, A.SousProduit,
      (SELECT Sum(Quantité_achetée_en_Kg) FROM ACHAT WHERE Produit=A.Produit) As [Total en Kg],
     (SELECT Sum(nombres_meules) FROM ACHAT WHERE Produit=A.Produit) As [Total meules]
    FROM ACHAT As A;

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Salut,

    J'ai essayé de faire quelque chose avec ta piste a toi, mais je dois mal m'y prendre parce que ca ne donne rien, pour que soit plus clair: voici le code SQL de ma requette actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication, ACHAT.nombre_meules, ACHAT.quantité_achetée_en_kg, Sum(ACHAT.nombre_meules) AS [Nombre total de meules], Sum(ACHAT.quantité_achetée_en_kg) AS [Quantité total en Kg]
    FROM RECETTE INNER JOIN (FABRICATION INNER JOIN (CLIENT INNER JOIN ACHAT ON CLIENT.id_client = ACHAT.id_client) ON FABRICATION.id_fabrication = ACHAT.id_fabrication) ON RECETTE.id_recette = FABRICATION.id_recette
    GROUP BY CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication, ACHAT.nombre_meules, ACHAT.quantité_achetée_en_kg;
    En piece jointe il y a la requette en mode création pour que tu visualise mieux, est-ce que a partir de la tu pourrais m'aider, je pense que comme ca tout sera plus claire.

    Merci en tout cas!
    Images attachées Images attachées  

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Essaie peut-être ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication,
    	(SELECT Sum(nombre_meules) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication) AS [Nombre total de meules],
    	(SELECT Sum(quantité_achetée_en_kg) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication) AS [Quantité total en Kg]
    FROM RECETTE INNER JOIN 
    		(FABRICATION INNER JOIN 
    			(CLIENT INNER JOIN ACHAT ON CLIENT.id_client = ACHAT.id_client)
    		ON FABRICATION.id_fabrication = ACHAT.id_fabrication)
    	ON RECETTE.id_recette = FABRICATION.id_recette
    GROUP BY CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication;

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    J'ai essayé la requete mais le probleme c'est que j'ai un message d'erreur me disant que ma requete ne contient pas id_client comme une partie de la fonction d'agrégat, et pareil pour id_fabrication il me semble? sais tu pourquoi j'ai ce message?

    Merci encore!

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Oui, j'ai oublié les clauses GROUP BY dans les deux sous-requêtes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication,
    	(SELECT Sum(nombre_meules) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication GROUP BY id_client, id_fabrication GROUP BY idclient,id_fabrication) AS [Nombre total de meules],
    	(SELECT Sum(quantité_achetée_en_kg) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication GROUP BY idclient,id_fabrication) AS [Quantité total en Kg]
    FROM RECETTE INNER JOIN 
    		(FABRICATION INNER JOIN 
    			(CLIENT INNER JOIN ACHAT ON CLIENT.id_client = ACHAT.id_client)
    		ON FABRICATION.id_fabrication = ACHAT.id_fabrication)
    	ON RECETTE.id_recette = FABRICATION.id_recette
    GROUP BY CLIENT.nom_client, CLIENT.id_client ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication, FABRICATION.id_fabrication;
    Maintenant, je comprends mal le besoin du jour et l'heure de l'achat ici. Un client peut-il acheter plusieurs fois à la même date et même heure le même produit ?

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    OK, alors ta requette c'est bon elle est niquel, ca marche merci.

    Par contre quand je cherche a créer l'état a partir de cette requete access me donne le msg d'erreur suivant:
    Clause "GROUP BY" multi niveau non utilisée dans une sous requette, donc je comprend pas trop ce que je dois faire, il faut que je mette ta requette en sous requette? si oui comment cela fonctionne?
    Pour ce qui est de la date de l'achat, en fait, ca correspond a la date de la livraison, donc ca permet de voir ce qui a été livré chaque jour (bon c'est peut etre pas tres clair, mais jmy retrouve),lol!

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    M'ouaip, en fait il faut retirer toutes les clauses GROUP BY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT CLIENT.nom_client, ACHAT.jour_heure, RECETTE.nom_recette, FABRICATION.nom_fabrication,
    	(SELECT Sum(nombre_meules) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication GROUP BY id_client, id_fabrication) AS [Nombre total de meules],
    	(SELECT Sum(quantité_achetée_en_kg) FROM ACHAT WHERE id_client=CLIENT.id_client AND id_fabrication=FABRICATION.id_fabrication) AS [Quantité total en Kg]
    FROM RECETTE INNER JOIN 
    		(FABRICATION INNER JOIN 
    			(CLIENT INNER JOIN ACHAT ON CLIENT.id_client = ACHAT.id_client)
    		ON FABRICATION.id_fabrication = ACHAT.id_fabrication)
    	ON RECETTE.id_recette = FABRICATION.id_recette;

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Ben cette fois l'état fonctionne mais le probleme c'est que ca ne me donne pas le total par recette mais le total par fabrication hors cela correspond aux quantitée achetée.
    Comment faire pour faire la somme de toute les quantitée achetée par recette comme l'exemple suivant:

    Recette: CAMEMBERT,

    Fabrication: -camembert 1/07, 20 meules
    - camembert 5/07, 22 meules
    Somme des CAMEMBERT: 42 meules

    Recette: BEAUFORT

    Fabrication: -Beaufort 2/07, 3 meules
    -Beaufort 10/07, 18 meules
    Sommes des BEAUFORT: 21 meules
    ...

    As tu une solution?

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,

    tu peux créer un groupe sur le Client avec Entête, dans ce groupe tu crées un groupe sur la Recette avec Entête puis tu rajoutes deux zones de textes dans l'entête du groupe Recette.

    Exemple :
    Pour le total de meules par recette et par client

    txtMeulesParRecette
    Propriété Source contrôle : =Sum([Nombre total de meules])
    Cumul : Par groupe

    Pour le total de la quantité achetée en kg par recette et par client
    txtQteParRecette
    Propriété Source contrôle : =Sum([Quantité achetée en Kg])
    Cumul : Par groupe

    Tu auras ainsi le total par recette et le détail par fabrication.

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Je ne comprend pas bien ce que tu entends par créer des groupes clients et recette avec entête, tu veux dire dans la requete? Si oui, peux tu me détailler un peu comment faire?

    Merci encore.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,

    les entêtes de groupes sont à créer dans l'état.

Discussions similaires

  1. Problème d'affichage dans requête
    Par loic20h28 dans le forum Développement
    Réponses: 4
    Dernier message: 30/03/2008, 21h17
  2. [ADO] Problème avec LIKE dans requête paramétrée
    Par _skip dans le forum Connexion aux bases de données
    Réponses: 7
    Dernier message: 04/11/2007, 20h53
  3. [SQL] Problème résultat checkbox dans requête SQL
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 02/07/2006, 15h02
  4. Problème avec date dans requête
    Par alain94 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 07h49
  5. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34

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