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]

Répondre à