+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 34
  1. #1
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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 :
    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 :
    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
    Ce message vous a été utile ? Si oui, cliquez sur

  2. #2
    Membre Expert

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 156
    Points : 1 288
    Points
    1 288

    Par défaut

    Code SQL :
    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.

  3. #3
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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
    Ce message vous a été utile ? Si oui, cliquez sur

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 156
    Points : 1 288
    Points
    1 288

    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 :
    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.

  5. #5
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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
    Ce message vous a été utile ? Si oui, cliquez sur

  6. #6
    Responsable Access

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

    Informations forums :
    Inscription : septembre 2003
    Messages : 4 794
    Points : 10 070
    Points
    10 070

    Par défaut



    je peux jouer aussi moi?

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

    Informations forums :
    Inscription : février 2005
    Messages : 5 016
    Points : 8 137
    Points
    8 137

    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

    Access : Les Cours, Les Sources et Les FAQs Office
    Avant de poster : les choses importantes à lire pour la bonne tenue du forum.
    sinon

    Ma boite à MPs n'est pas l'annexe du forum Le complément BouleDeCristal n'existe pas encore !!!

  8. #8
    Expert Confirmé Sénior
    Avatar de cafeine
    Inscrit en
    juin 2002
    Messages
    3 896
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 3 896
    Points : 6 615
    Points
    6 615

    Par défaut

    Hello,

    moi j'ai ça :

    Code SQL :
    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
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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.
    Ce message vous a été utile ? Si oui, cliquez sur

  10. #10
    Rédacteur/Modérateur

    Avatar de Dolphy35
    Homme Profil pro
    couteau Suisse
    Inscrit en
    octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : couteau Suisse
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2004
    Messages : 4 373
    Points : 10 801
    Points
    10 801

    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 :
    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
    Rédacteur
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    février 2005
    Messages
    5 016
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : février 2005
    Messages : 5 016
    Points : 8 137
    Points
    8 137

    Par défaut

    gagné...

    Access : Les Cours, Les Sources et Les FAQs Office
    Avant de poster : les choses importantes à lire pour la bonne tenue du forum.
    sinon

    Ma boite à MPs n'est pas l'annexe du forum Le complément BouleDeCristal n'existe pas encore !!!

  12. #12
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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
    Ce message vous a été utile ? Si oui, cliquez sur

  13. #13
    Expert Confirmé Sénior
    Avatar de cafeine
    Inscrit en
    juin 2002
    Messages
    3 896
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 3 896
    Points : 6 615
    Points
    6 615

    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
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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.
    Ce message vous a été utile ? Si oui, cliquez sur

  15. #15
    Expert Confirmé Sénior
    Avatar de cafeine
    Inscrit en
    juin 2002
    Messages
    3 896
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 3 896
    Points : 6 615
    Points
    6 615

    Par défaut

    ahahah,

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

    Code SQL :
    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
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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 :
    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
    Ce message vous a été utile ? Si oui, cliquez sur

  17. #17
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    Par défaut

    Le gagnant est :

    cafeine



    Même si kloun était sur la bonne piste
    Ce message vous a été utile ? Si oui, cliquez sur

  18. #18
    Expert Confirmé Sénior
    Avatar de cafeine
    Inscrit en
    juin 2002
    Messages
    3 896
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 3 896
    Points : 6 615
    Points
    6 615

    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 Expert

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 156
    Points : 1 288
    Points
    1 288

    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... )

  20. #20
    Rédacteur

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

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

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 502
    Points : 31 862
    Points
    31 862

    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 :
    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 :
    1
    2
    3
    4
    SELECT LibBande, Count(*) As C
    FROM tblBande, tblDossier
    WHERE TotalTime>=mini and TotalTime<=maxi
    GROUP BY LibBande

    Code :
    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 :
    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 :
    1
    2
    3
    4
    5
    LibBande	C
    De 0 à 100	3
    De 101 à 200	2
    De 201 à 300	1
    De 301 à 1000	2
    Ce message vous a été utile ? Si oui, cliquez sur

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •