Puis-je me risquer à cette question :
Avec cette requête voir copie d'écran :

J'obtiens bien ce que je veux: le total des prix par
Genre. Cependant j'ai obtenu cette requête en la modifiant et en
mettant la fonction GROUPE dans la colonne genre, l'assistant ne m'a
jamais proposé de groupement; mais peut-être n'ai-je pas tout compris... auquel cas je suis preneur d'explications
Merci
Claude
Le 10/06/2010 08:57, Claude FRICARD a écrit :
Doc,
Je préfère de beaucoup l'explication à .....et si cette explication m'a
déjà été donnée, j'en ai pas souvenance mais je m'en excuse auprès des
auteurs.
Peut-être dire ma démarche: pour ce cours à l'association j'entends
montrer comment construire une base simple : une gestion de
bibliothèque. J'ai fait un tutoriel décrivant cette création de bout en
bout, m'appuyant donc sur la même base que le session précédente.
Pour ce qui est de ce calcul de prix dans un 1er temps j'ai indiqué
comment faire la somme des prix sans tenir compte du GENRE (roman,
fiction,etc.) puis en introduisant un critère "en dur" comme ROMAN pour
faire la somme des prix des livres du GENRE : Roman, et enfin montrer
que ce paramètre GENRE peut-être fourni à l'invocation de la Requête
grâce à la boite de dialogue générée par le LIKE :Recherche.
Ce que j'obtiens (en décochant la case visible ... ;-) ) .
De fait comme dit Bernard (Ribotb) c'est plus cohérent de faire un
GROUP BY GENRE.
Merci à vous
A+
Claude
Le 09/06/2010 19:50, Docgranville a écrit :
Le 09/06/2010 19:21, Claude FRICARD a écrit :
Doc,
Je perçois dans ta réponse un peu de sarcasme...Il reste que agrégat ou
pas je ne comprends pas pourquoi une case de visibilité ferait la
différence. ... ;-)
Il est vrai que le code SQL n'est pas tout à fait le même suivant la
visibilité ou pas :
* SELECT SUM( "Prix" ) AS "Total GENRE", "GENRE" FROM "OUVRAGES"
AS "OUVRAGES" WHERE "GENRE" LIKE :Recherche
* SELECT SUM( "Prix" ) AS "Total GENRE" FROM "OUVRAGES" AS
"OUVRAGES" WHERE "GENRE" LIKE :Recherche
Pour que je ne revienne pas l'année prochaine avec ma question....
peut-être m'expliquer le pourquoi des choses, quitte à me dire que si
ça fonctionne avec Access c'est une anomalie...
Salutations mon cher Doc
Claude
Claude,
Il y avait effectivement du sarcasme (léger) dans mon propos ; la
raison en est que "le pourquoi des choses" comme tu dis t'a déjà été
expliqué l'année dernière mais que tu n'as pas voulu l'entendre.
Depuis l'année dernière, tu fais une fixette sur cette fameuse case de
visibilité alors que ce n'est pas le noeud du problème.
Je t'avais écrit l'année dernière : "ce qui me semble important (mais
là, c'est moi qui extrapole puisque je ne sais pas exactement ce que tu
comptais faire), ce n'est pas de constater qu'il suffisait de décocher
la case visibilité pour que la requête fonctionne, mais plutôt le fait
de savoir qu'il fallait mettre une clause de groupement dans la
deuxième colonne, pour parvenir à faire fonctionner la requête telle
qu'elle se présentait"
En fait, en décochant la case de visibilité, ta requêtes ne porte plus
sur le champ "GENRE" et il n'y a plus qu'une seul champ qui est
présenté, avec une condition d'agrégation (le SUM).
De ce fait, tu supprimes la cause de l'erreur, qui était que ta requête
portait sur plusieurs champs, dont certains étaient dans des calculs
d'agrégation et d'autres étaient hors des calculs d'agrégation (ces
derniers devant alors obligatoirement être cités derrière la clause
Group by) ; donc, pour toi cocher ou décocher cette fameuse case rend
valable ou non ta requête ; sauf que, précisément, dans les deux
versions de la requête que tu exposes ci-dessus, la grande différence,
c'est que la première (qui ne fonctionne pas) porte sur deux champs (et
elle ne fonctionne pas à cause du second), alors que la seconde ne
porte plus que sur un champ, la clause de visibilité ayant eu pour
effet collatéral de supprimer ton second champ.
Après, la raison pour laquelle Access (que je ne connais pas)
fonctionne différemment, je ne sais pas.
A+
|