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

Défis Discussion :

Un petit défi de requête Access par la rédaction


Sujet :

Défis

  1. #1
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut Un petit défi de requête Access par la rédaction
    Allez, une fois n'est pas coutume, je vous propose un petit défi.

    Soit une table tblCA représentant le chiffre d'affaire de mes commerciaux par trimestre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    IdComm	NumTrim	CA
    1	1	110
    2	1	210
    3	1	310
    1	2	120
    2	2	220
    3	2	320
    1	3	130
    2	3	230
    3	3	330
    1	4	140
    2	4	240
    3	4	340

    Je souhaite obtenir (sans VBA, ni analyse croisée) le tableau suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idComm	T1	T2	T3	T4
    1	110	120	130	140
    2	210	220	230	240
    3	310	320	330	340
    A vous de jouer

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    select IdComm, CA as T1, 0 as T2, 0 as T3 , 0 as T4 
    from TblCA 
    Where NumTrim = 1
    Union
    select IdComm, 0 as T1, CA as T2, 0 as T3 , 0 as T4 
    from TblCA 
    Where NumTrim = 2
    Union
    select IdComm, 0 as T1, 0 as T2, CA as T3 , 0 as T4 
    from TblCA 
    Where NumTrim = 3
    Union
    select IdComm, 0 as T1, 0 as T2, 0 as T3 , CA as T4 
    from TblCA 
    Where NumTrim = 4
    Je sais pas s'il faudrait pas des sum quelque part ...
    Mais à mon avis c'est une bonne base.
    [Access] Les bases du débogage => ici

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le soucis c'est que le union est très gourmand en ressources car il trie les résultats. De plus, là, tu balayes 4 fois la tables. Ceci dit, je pense que tu es sur la bonne piste à priori

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    En plus, par rapport à la première requête que j'ai donné (Req1), il faut en faire une 2nde :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Req1.IdComm, Sum(Req1.T1) AS SommeDeT1, Sum(Req1.T2) AS SommeDeT2, Sum(Req1.T3) AS SommeDeT3, Sum(Req1.T4) AS SommeDeT4
    FROM Req1
    GROUP BY Req1.IdComm;
    Et là, ça donne bien les résultats demandés.
    [Access] Les bases du débogage => ici

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Oui mais tu as toujours les UNION.

    Beaucoup trop gourmand. J'aimerais vraiment qu'on ne lise qu'une seule fois la table

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut


    je peux jouer aussi moi?

  7. #7
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Arkham46


    je peux jouer aussi moi?
    Nan, tu es hors catégories

    C'est de l'humour, tu peux participer

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    moi j'ai ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblTest.idComm, 
    Sum(IIf([tblTest]![NumTrim]=1,[tblTest]![CA],0)) AS T1, 
    Sum(IIf([tblTest]![NumTrim]=2,[tblTest]![CA],0)) AS T2, 
    Sum(IIf([tblTest]![NumTrim]=3,[tblTest]![CA],0)) AS T3, 
    Sum(IIf([tblTest]![NumTrim]=4,[tblTest]![CA],0)) AS T4
    FROM tblTest
    GROUP BY tblTest.idComm;
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut


    Juste un petit détail, je ne veux pas que ça m'affiche zéro pour les trimestres non renseignés. C'est à dire que si le commercial 3 n'a pas de données pour le trimestre 4, je ne veux rien dans cette colonne.

  10. #10
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Citation Envoyé par Tofalu
    Juste un petit détail, je ne veux pas que ça m'affiche zéro pour les trimestres non renseignés. C'est à dire que si le commercial 3 n'a pas de données pour le trimestre 4, je ne veux rien dans cette colonne.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblTest.idComm,
    Sum(IIf([tblTest]![NumTrim]=1,[tblTest]![CA],Null)) AS T1,
    Sum(IIf([tblTest]![NumTrim]=2,[tblTest]![CA],Null)) AS T2,
    Sum(IIf([tblTest]![NumTrim]=3,[tblTest]![CA],Null)) AS T3,
    Sum(IIf([tblTest]![NumTrim]=4,[tblTest]![CA],Null)) AS T4
    FROM tblTest
    GROUP BY tblTest.idComm;

    à cafeine

  11. #11
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    gagné...

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Maintenant j'interdit la fonction Sum (y a pas grand chose à modifier lol). Ce que j'aimerais aussi c'est la justification du calcul à venir

  13. #13
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Qu'est-ce que tu appelles "justification du calcul" ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  14. #14
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par cafeine
    Qu'est-ce que tu appelles "justification du calcul" ?

    Cafeine, donne la réponse avant et je te poserais la question plus explicitement.

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    ahahah,

    je te le fais avec Max() (t'as pas dit qu'on n'avait pas le droit)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblTest.idComm, 
    Max(IIf([tblTest]![NumTrim]=1,[tblTest]![CA],Null)) AS T1, 
    Max(IIf([tblTest]![NumTrim]=2,[tblTest]![CA],Null)) AS T2, 
    Max(IIf([tblTest]![NumTrim]=3,[tblTest]![CA],Null)) AS T3, 
    Max(IIf([tblTest]![NumTrim]=4,[tblTest]![CA],Null)) AS T4
    FROM tblTest
    GROUP BY tblTest.idComm;
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  16. #16
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par cafeine
    ahahah,

    je te le fais avec Max() (t'as pas dit qu'on n'avait pas le droit)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT tblTest.idComm, 
    Max(IIf([tblTest]![NumTrim]=1,[tblTest]![CA],Null)) AS T1, 
    Max(IIf([tblTest]![NumTrim]=2,[tblTest]![CA],Null)) AS T2, 
    Max(IIf([tblTest]![NumTrim]=3,[tblTest]![CA],Null)) AS T3, 
    Max(IIf([tblTest]![NumTrim]=4,[tblTest]![CA],Null)) AS T4
    FROM tblTest
    GROUP BY tblTest.idComm;

    YES, et l'explication que j'attendais c'est que les fonctions d'aggrégats ignorent les valeurs nulls. Ici, on se sert d'une fonction d'aggrégat uniquement pour exclure les valeurs nulles

  17. #17
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le gagnant est :

    cafeine



    Même si kloun était sur la bonne piste

  18. #18
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut


    je l'imprime et je me le fais encadrer !
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  19. #19
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Voilà que je me retrouve avec un problème similaire : à la place de la somme, je dois compter des dossiers :

    IdDossier Total time (en minutes)
    1 100
    2 123
    3 200
    4 80
    5 50
    6 500
    7 1000
    8 210
    Je voudrais avoir sur la même ligne le nombre de dossier dont le Total Time est inférieur à 100, entre 101 et 200, entre 201 et 1000, supérieur à 1000 ...

    Je fais comment ?
    Merci.
    (Accessoirement, j'aimerai savoir comment Tofalu a fait la mise en page de son tableau sur son 1er post... )
    [Access] Les bases du débogage => ici

  20. #20
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ce que je te propose ici afin d'être le plus évolutif possible c'est de créer une table utilitaire tblBande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LibBande	Mini	Maxi
    De 0 à 100	0	100
    De 101 à 200	101	200
    De 201 à 1000	201	1000
    Plus de 1000	1001	99999999
    La requête devient alors

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT LibBande, Count(*) As C
    FROM tblBande, tblDossier
    WHERE TotalTime>=mini and TotalTime<=maxi
    GROUP BY LibBande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LibBande	C
    De 0 à 100	3
    De 101 à 200	2
    De 201 à 1000	3
    Ainsi, si demain on te demande de donner ceux entre 200 et 300, il suffit de modifier le contenu de la table. la requête reste la même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LibBande	Mini	Maxi
    De 0 à 100	0	100
    De 101 à 200	101	200
    De 301 à 1000	301	1000
    Plus de 1000	1001	99999999
    De 201 à 300	201	300
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LibBande	C
    De 0 à 100	3
    De 101 à 200	2
    De 201 à 300	1
    De 301 à 1000	2

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

Discussions similaires

  1. petit script chat en vb.net avec base Access
    Par Tchiii dans le forum VB.NET
    Réponses: 0
    Dernier message: 10/11/2012, 09h51
  2. Réponses: 3
    Dernier message: 28/02/2003, 17h06
  3. Réponses: 3
    Dernier message: 16/12/2002, 16h12
  4. [TP]TP s'affiche en tout petit sous w2000
    Par spiroucarolo dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 21/10/2002, 16h36
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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