Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2006, 10h12   #1
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
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
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
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
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 938
Points : 7 938


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

Informations forums :
Inscription : février 2005
Messages : 5 029
Points : 6 000
Points : 6 000
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
Expert Confirmé Sénior

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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


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

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718


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
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 104
Points : 8 731
Points : 8 731
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
Rédacteur
 
Avatar de Lou Pitchoun
 
Christophe Lessirard
Inscription : février 2005
Messages : 5 029
Détails du profil
Informations personnelles :
Nom : Christophe Lessirard
Âge : 33
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 5 029
Points : 6 000
Points : 6 000
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
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Expert Confirmé Sénior

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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


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

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Expert Confirmé Sénior

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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


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

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Rédacteur

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500


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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


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

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

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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 Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h13.


 
 
 
 
Partenaires

Hébergement Web