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 :

[Requête] Problème dans une requête analyse croisée


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut [Requête] Problème dans une requête analyse croisée
    Bonjour à tous,
    voici mon souci:
    pour mon stage j'ai créé une base permettant le suivi de l'activité des commerciaux de l'entreprise.
    J'ai une table qui comporte pour chaque affaire (je ne vous donne que les informations importantes pour comprendre mon problème histoire de simplifier): un numéro auto,l'état du devis fait par le commercial pour l'affaire ("en attente","conclu","annulé","refusé"), le chiffre d'affaire hort taxe associé à l'affaire (appelé CAHT).

    Ceci étant déjà fait,je dois à présent créer un état qui me permet d'analyser le taux de réussite des commerciaux, sous la forme d'un tableau avec en entête de ligne chacun des commerciaux, et en entête de colonne les données suivantes: nbre de devis en attente-nbre de devis à faire-nbre de devis conclus-nbre de devis refusés-chiffre d'affaire total par commercial-panier moyen (avec panier moyen = CA total par commercial/nbre de rdv conclus).

    J'ai pour le moment créé une requête analyse croisée qui me permet d'obtenir:sur chacune des lignes le nom du commercial, et sur chacune des colonnes le nombre de devis de chaque type.

    En mode création j'ai ceci:


    qui me donne en sql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Count(Temp_Analyse.N°) AS CompteDeN°
    SELECT Temp_Analyse.NomVendeur, Count(Temp_Analyse.N°) AS [Total de N°]
    FROM Temp_Analyse
    GROUP BY Temp_Analyse.NomVendeur
    PIVOT Temp_Analyse.EtatDevis In ("annulé","refusé","en attente","conclu");
    Et comme résultat à l'exécution le résultat attendu,qui est:



    Par contre j'ai essayé plusieurs possibilités pour arriver à insérer la somme des CAHT en entête de colonne,mais je n'y suis pas parvenu et access n'accepte aucune de mes propositions.Par conséquent je n'arrive pas non plus à avoir d'entête "panier moyen" pour chacun des commerciaux puisque je ne peux pas appliquer la formule "CA/nbre rdv conclus" car il me manque la variable CA.
    Auriez-vous des pistes qui pourraient m'aider à me dépanner svp?
    En vous remerciant d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    il faut que tu fasses une nouvelle requête basée sur celle-ci, ds laquelle tu sélectionne tous les champs de celle-ci + les champs que tu veux ajouter

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    J'avais trouvé ça il y a quelques temps, je pense que cela ressemble à ton besoin :
    Comment faire pour créer une requête Analyse croisée comportant plusieurs champs de valeur
    http://support.microsoft.com/kb/304458/fr

    JMarc

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    en mode création, tu mets ta requête analyse croisée, ta table Temp-analyse, liées par le code vendeur, tu sélectionnes tous les champs de la requête analyse croisée, puis tu ajoutes le champ CAHT de la table Temp_analyse (opération : somme), puis tu ajoutes un autre champ calculé panier moyen

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour voir comment faire
    tu crées une table matable avec trois champs
    client
    sit
    valeur

    et tu fais tourner ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TRANSFORM Sum(Sval) AS montant
    SELECT client
    FROM 
    (SELECT client, sit as rub, Sum(valeur) AS Sval  FROM matable GROUP BY client, sit
    UNION 
    select client, "total" as rub , Sum(valeur) AS Sval  FROM matable GROUP BY client)
     
    GROUP BY client
    PIVOT rub;
    sur ce coup là microsoft s'est pas foulé
    Elle est pas belle la vie ?

  6. #6
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Merci pour toutes vos réponses si rapides.
    Mais je suis débutant et je ne suis pas parvenu (pour le moment) à mettre en oeuvre ces méthodes.

    @jeanchcom: ça a l'air exactement comme ton exemple ce que j'ai besoin de faire,mais ils ont compliqué le problème avec leurs histoires de concaténation et les noms des champs à remplir sont différents de ceux d'access 2000.De plus je n'ai pas compris comment ils introduisent les noms des entêtes de ligne et colonnes (par rapport à ma méthode du premier post).

    @alcabk: j'obtiens un message d'erreur (qui me revient souvent à chaque fois que je teste) comme quoi il faut mettre une valeur Regroupement pour les variables en entêtes de colonnes,et donc je n'arrive pas à entrer somme dans CAHT.

    @random: je ne saisis pas la nom de tes variables par rapport à l'exemple que je t'ai donné (je n'ai déjà pas de clients mais des vendeurs).Valeur correspondrait à montant?Et à quoi correspond sit?

    Merci pour votre aide tout de même j'aurais simplement besoin d'un peu plus de détails.

    J'aurais pensé sinon: vu que la seule colonne me manquant étant celle avec la somme des CAHT par commercial,de créer une autre requête analyse croisée avec en ligne les vendeurs et une colonne avec somme([CAHT]),si je comprend bien la première intervention de alcabk c'est ce qu'il avait proposé,et d'utiliser une troisième requête me permettant de sélectionner les champs que je désire et les traiter selon ma convenance,mais là encore j'obtiens le message d'erreur comme quoi access n'accepte que des regroupemnts pour les entêtes de colonne (alors que j'aimerais faire la somme des CAHT).
    Donc voilà si vous auriez des pistes pour m'éclairer un peu,je vous en serai très reconnaissant.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    client = vendeur
    valeur=temps analyse

    regarde bien les données dans matable et le résultat de la requête
    ta solution est là
    Elle est pas belle la vie ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    la requête que tu refais, ce n'est pas une analyse croisée, mais sélection... désolée de ne pas avoir précisé...

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ceci sera plus explicite
    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
    19
    20
     
    TRANSFORM Sum(nb) AS SommeDenb
    SELECT nomvendeur
    FROM
    (SELECT nomvendeur,etatdevis as rub, count(caht) AS nb
    FROM temps_analyse
    GROUP BY nomvendeur,etatdevis
    union
    SELECT nomvendeur,"total ca"  as rub, Sum(caht) AS nb
    FROM temps_analyse
    GROUP BY nomvendeur
    UNION SELECT nomvendeur,"total nb"  as rub,count(nomvendeur) AS nb
    FROM temps_analyse
    GROUP BY nomvendeur
    UNION SELECT nomvendeur, "panier moyen" as rub,Sum([caht])/Count([etatdevis]) AS nb
    FROM temps_analyse
    WHERE etatdevis="conclu"
    GROUP BY nomvendeur) as sr1
    GROUP BY nomvendeur
    PIVOT rub In ("total ca","total nb","panier moyen","annulé","refusé","en attente","conclu");
    Elle est pas belle la vie ?

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    @random: Merci beaucoup ça a l'air d'être quasiment ça,mis à part que quand je compare les résultats en nombre de devis effectués pour les "annulé","refusé" ou "en attente" le résultat obtenu avec ta requête ne correspond pas à celui de ma première requête (celle ou je n'arrivais pas à mettre le CAHT,que je décris en image dans mon premier post).
    Les résultats obtenus sont les suivants:

    -avec ma première requête:


    -avec la tienne:



    Par contre je ne vois vraiment pas ou ça cloche,pour les conclus et le nombre total de devis ça correspond bien.


    @alcabk:
    tu me propose d'effectuer une requête sélection de ma première requête analyse croisée,en liant les deux tables par les vendeurs (je l'ai fait par le nom car les codes n'apparaissent pas dans ma requête analysé croisée),et j'ai mis pour le champ CAHT l'expression somme pour avoir à chaque ligne le total par vendeur,ce qui me donne ceci si j'ai bien compris ta méthode:



    En faisant ça j'obtiens cette erreur ( ):



    Ai-je bien compris ta méthode ou ai-je fait une erreur de syntaxe?

    Quoiqu'il en soit merci beaucoup poiur votre aide!

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    en fait, tu n'as pas besoin de le créer en expression, tu mets ton champs CAHT de la table Temp_analyse, et tu ajoute la ligne opération, tu mets tout en regroupement, sauf CAHT en somme

    par contre, pr le panier moyen, faudra faire une expression et entrer "expression" ds la ligne opération

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pardon remplace partout union par
    union all
    Elle est pas belle la vie ?

  13. #13
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    @random: quelle est la différence entre union et union all?
    Quand je modifie ta requête en ajoutant les all après les trois unions j'obtiens l'erreur suivante,qui m'a l'air d'être du à la taille de l'expression:



    Je ne peux donc pas enregistrer la modification,et même si je supprime ensuite les all j'obtiens à nouveau la même erreur si j'essaie d'enregistrer la requête!(je suis donc obligé de choisir non à "voulez-vous enregistrer les modifications").

    @alcabk: je ne te suis pas,comment puis-je mettre des regroupements et sommes sachant que ce n'est plus une requête analyse croisée mais une requête selection?(comme tu me l'a rappelé au-dessous)

    Désolé de vous solliciter autant là-dessus mais dès que j'aurais terminé cet état j'aurais fini ma base de données!(que je dois montrer demain à priori).
    Merci

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    ds ta requête en création, tu cliques droit ds la grille et tu sélectionnes "totaux" (logo somme mathematique), et là il y a une ligne "opération qui s'ajoute dans ta grille...

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    pr panier moyen

    expr:somme([Temp-analyse]![CAHT])/conclu
    et "expression" ds la ligne opération

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    vi il y a un petit truc access
    aprés la modif all
    se remettre en mode edit sql

    remplacer [ par (
    et ]. par )
    relancer
    Elle est pas belle la vie ?

  17. #17
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    @random: effectivement j'arrive à enregistrer la requête avec ton astuce,mais j'obtiens toujours le même résultat il me manque toujours autant de devis par rapport à ma première requête analyse croisée (pour vérification j'ai compté le nombre de devis de chaque type par commercial et c'est mon résultat qui est le bon).

    @alcabk: J'ai bien trouvé la ligne opération,et comme tu me l'as conseillé j'ai sélectionné la totalité de ma première requête + le CAHT de ma table Temp_Analyse, j'ai tout mis en regroupement et mis CAHT en somme.
    J'obtiens donc ceci (je capture d'écran à tout va aujourd'hui ):



    Mais access refuse de me laisser enregistrer cette requête et m'affiche ceci:



    "Impossible d'effectuer un regroupement sur les champs sélectionnés avec *".

    Peut-être faut-il spécifier que NomVendeur doit être en entête de ligne?Mais il n'y a pas cette option dans le menu opération.

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    qd tu sélectionnes tous les champs de ta 1è requête, fais-le un par un et pas avec *

  19. #19
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par alcabk
    qd tu sélectionnes tous les champs de ta 1è requête, fais-le un par un et pas avec *
    En fait c'est ce que je faisais,mais quand je fermais et enregistrais la requête access ajoutait automatiquement l'étoile (je l'ai supprimée et c'est bon).

    ça fonctionne enfin (ce fut laborieux mais bon) mais il me reste un dernier souci: quand j'ajoute le CAHT de ma table Temp_Analyse dans la requête selection,il me somme la totalité des CAHT pour chaque commercial.Or la valeur qui m'intéresse et que j'aimerais obtenir pour ce champ est uniquement la somme pour chaque commercial des CAHT qui ont un EtatDevis qui correspond à conclu (afin de pouvoir avoir mon véritable panier moyen, car pour le moment il m'ajoute CAHT des devis annulé + refusé + en attente + conclu).
    J'imagine qu'il faut ajouter dans ma requête sélection une clause du type (Sum(CAHT) WHERE EtatDevis="conclu") mais je n'y suis pas parvenu.Comment dois-je m'y prendre?

    Merci en tout cas pour tous ces dépannages!

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 174
    Points : 178
    Points
    178
    Par défaut
    alors là je pense qu'il te faut une autre requête intermédiaire (y'a peut-être +court, mais moi je ferais comme ça...)

    req1 : ta requête analyse croisée
    req2 (basée aussi sur TempAnalyse) : nomvendeur -> regroupement ; EtatDevis (critère=conclu) -> compte ; CAHT ->somme

    ta requête finale :
    req1 + req2 liées par nomvendeur :
    *toutes les colonnes de req1 (une par une...) -> regroupement
    *req2.CAHT -> somme ou regroupement, faut voir
    *paniermoyen:req2.CAHT/req2.EtatDevis

    bonne chance...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 17
    Dernier message: 02/02/2009, 09h57
  2. Réponses: 3
    Dernier message: 31/12/2008, 12h27
  3. Conserver la valeur d'un champ dans une requ
    Par valalu dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/08/2007, 23h34
  4. [Comm] Changer les Bauds dans une com RS-232
    Par philippe13 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/01/2006, 10h08
  5. comment rajouter un caractère " ' " dans une requê
    Par GDVL dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 30/07/2004, 16h58

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