Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Défis
Défis Ce forum est celui des défis et challenges Office. Prêts à relever le gant ? C'est parti !
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2006, 10h12   #1
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h26   #2
Kloun
Membre Expert
 
Inscription : janvier 2006
Messages : 1 132
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 132
Points : 1 130
Points : 1 130
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.
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h32   #3
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h38   #4
Kloun
Membre Expert
 
Inscription : janvier 2006
Messages : 1 132
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 132
Points : 1 130
Points : 1 130
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.
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h47   #5
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
Oui mais tu as toujours les UNION.

Beaucoup trop gourmand. J'aimerais vraiment qu'on ne lise qu'une seule fois la table
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h49   #6
Arkham46
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 442
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 442
Points : 8 141
Points : 8 141


je peux jouer aussi moi?
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h51   #7
Lou Pitchoun
Rédacteur
 
Avatar de Lou Pitchoun
 
Christophe Lessirard
Inscription : février 2005
Messages : 5 031
Détails du profil
Informations personnelles :
Nom : Christophe Lessirard
Âge : 34
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 5 031
Points : 7 927
Points : 7 927
Envoyer un message via MSN à Lou Pitchoun
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 !!!
Lou Pitchoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 10h52   #8
cafeine
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 894
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 894
Points : 5 744
Points : 5 744
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


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h09   #9
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307


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.
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h16   #10
Dolphy35
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
couteau Suisse
Inscription : octobre 2004
Messages : 4 240
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 34
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : couteau Suisse
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 240
Points : 9 294
Points : 9 294
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
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h18   #11
Lou Pitchoun
Rédacteur
 
Avatar de Lou Pitchoun
 
Christophe Lessirard
Inscription : février 2005
Messages : 5 031
Détails du profil
Informations personnelles :
Nom : Christophe Lessirard
Âge : 34
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 5 031
Points : 7 927
Points : 7 927
Envoyer un message via MSN à Lou Pitchoun
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 !!!
Lou Pitchoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h20   #12
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h43   #13
cafeine
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 894
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 894
Points : 5 744
Points : 5 744
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


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h51   #14
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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.
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h56   #15
cafeine
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 894
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 894
Points : 5 744
Points : 5 744
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


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 11h59   #16
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 12h01   #17
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
Le gagnant est :

cafeine



Même si kloun était sur la bonne piste
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2006, 12h08   #18
cafeine
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 894
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 894
Points : 5 744
Points : 5 744


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


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2006, 16h32   #19
Kloun
Membre Expert
 
Inscription : janvier 2006
Messages : 1 132
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 132
Points : 1 130
Points : 1 130
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... )
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2006, 16h44   #20
Tofalu
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 633
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 29

Informations forums :
Inscription : octobre 2004
Messages : 8 633
Points : 24 307
Points : 24 307
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
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h45.


 
 
 
 
Partenaires

Hébergement Web