Marie-Pierre CORONEL a écrit :
Salut,
Je tente de faire une requête SQL faute de réussir ma requête avec
l'outil graphique. Je me suis acheté un bouquin sur SQL mais ça ne me
donne pas pour autant la maîtrise du sujet...
J'ai rédigé la requête suivante :
SELECT EVERY ("Types abonnement"."typeabonnement") AS
"typeabonnement", COUNT( "Suivi abonnements"."codeabonnement" ) AS
"nombre", "Suivi abonnements"."mois" AS "mois" FROM "Types abonnement"
AS "Types abonnement", "Suivi abonnements" AS "Suivi abonnements"
WHERE "Suivi abonnements"."codeabonnement" = "Types
abonnement"."codeabonnement" AND "Suivi abonnements"."mois" =
:mois_étudié GROUP BY "typeabonnement", "nombre", "mois" ORDER BY
"typeabonnement" ASC
Aucun message erreur (enfin!), mais elle ne me donne pas le résultat
attendu :'( (je veux le nombre d'abonnements souscrits par type
d'abonnements pour un mois donné)
Et ma compréhension se heurte directement à l'interprêtation qu'en
fait l'outil graphique :'(
dont je vous fait une copie écran (je suis toujours en 3.2 RC5)
C'est simple, je ne retrouve pas du tout ce que je crois avoir demandé...
Qui peut m'aider à comprendre ?
je joins ma base aussi des fois que compte tenu de sa construction la
requête demandée ne puisse aboutir...
Merci.
Bonjour Marie-Pierre,
Ta base n'est pas passée ; seul ton fichier ODT figurait en pièce jointe.
Ça n'a peut-être rien à voir avec le souci que tu rencontres, mais à ta
place, je commencerais par changer le nom de ma table ; faire figurer
une espace ou un caractère accentué peut nuire à la portabilité ou, en
tout cas, affecter la cohérence dans le comportement de la base.
Par ailleurs, si tu sais écrire directement une requête SQL, laisse
tomber l'outil graphique ; et surtout, je crois qu'il faut éviter
absolument de s'amuser à aller voir la représentation graphique de la
jolie requête qu'on vient d'écrire en SQL ; parce que après, si on
quitte l'outil graphique et qu'on revient à la forme SQL, la requête est
toute chamboulée et peut même ne plus fonctionner en SQL.
Sinon, quelques points de ta requête me posent question :
- SELECT EVERY : je dois t'avouer que je n'ai jamais croisé cette
expression (je reconnais que je n'ai pas une immense expérience de SQL
mais j'ai lu différentes sources sur SQL et je n'ai jamais vu ce truc
là) ; il me semble que quand on veut tout sélectionner, on écrit "select
*" qui s'énonce [select all] ; tu es sûre de ton "EVERY" ?
- si tu as malencontreusement remplacé "*" [all] par "EVERY", je pense
qu'il y a aussi une contradiction fondamentale dans la rédaction de ta
requête ; le "*" signifie que tu veux que ta requête affiche tous les
champs qui correspondent à la condition qui sera énoncée après le
"WHERE" ; or, après ton "EVERY", tu énonces un certain nombre de
colonnes que tu veux voir affichées (ce qui se situe entre le "EVERY" et
le "FROM") ; d'où contradiction.
- pour les deux raisons ci-dessus, je supprimerais le "EVERY" ; mais
attends ce n'est pas fini !
- en ce qui concerne les alias, je ne vois pas bien pourquoi tu
t'échines à donner pour alias, le nom du champ que tu sélectionnes ;
autant après un "COUNT" c'est nécessaire, autant pour les autres ça ne
l'est pas, surtout si c'est pour redonner au champ, le nom qu'il avait à
l'origine : tu pourrais donc écrire (sous réserve de ma remarque sur les
caractères spéciaux) :
SELECT "Types abonnement"."typeabonnement", COUNT("Suivi
abonnements"."codeabonnement") AS "nombre", "Suivi abonnements"."mois"
FROM...
- par ailleurs, il n'y a aucune utilité, à ma connaissance, à donner un
alias aux tables dans lesquelles va s'opérer ta requête ; donc tu
pourrais parfaitement écrire : ...FROM "Types abonnement", "Suivi
abonnements" ;
- afin de voir si tu parviens à quelque chose, je te proposerais, dans
un premier temps, de supprimer ta clause "AND "Suivi abonnements"."mois"
= :mois_étudié" ; elle ne fonctionne pas en mode SQL direct (elle
fonctionne dans "l'autre" mode SQL) et elle peut provoquer un souci ; je
note qu'en plus, le nom de variable comporte un caractère accentué, ce
qui peut, là encore causer une difficulté ; une fois que le reste de ta
requête fonctionnera, tu pourras introduire cette clause supplémentaire
; à ce sujet, le mois considéré, tu l'exprimes en toutes lettres ou avec
son numéro ?
Enfin, pour permettre à chacun de se pencher un peu plus sur ta base
peut-être pourrais-tu la placer sur un site de dépôt (de type "cijoint")
et nous communiquer ici l'adresse de ton dépôt ; ça me permettrait de te
regarder ce qui ne fonctionne pas dans ta requête, en particulier en
fonction de tes tables et des noms de tes champs.
A+
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]