|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Bonjour,
Voilà j'ai épuisé toutes mes forces dans cette requête et je ne trouve pas de réponse, j'aimerais avoir votre aide pour sortir ce que je souhaite de cette maudite requête. Voilà ma requête (en rouge ce qui ne vas pas) : Code :
Je ne sais plus trop quoi faire, merci pour votre aide. |
||
|
|
00
|
|
|
#2 | ||||
|
Membre éclairé
![]() Ingénieur développement logiciels Inscription : mars 2006 Messages : 291 ![]() |
Bonjour,
Moi, je ferai 2 requêtes : Code :
Puis Code :
__________________
Je ne sais qu'une chose, c'est que je ne sais rien. (Socrate) |
||||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Pourquoi passer par une table temporaire alors que vous avez ecrit vos 2 requetes... une jointure suffirait
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
10
|
|
|
#4 | ||
|
Membre éclairé
![]() |
tu essayes ceci:
Code :
|
||
|
|
00
|
|
|
#5 |
![]() ![]() |
Il y a plus simple pour sélectionner dans le premier trimestre si la colonne date (qui ne devrait pas s'appeler ainsi car c'est un mot réservé du langage SQL) est de type DATE :
Code :
WHERE EXTRACT(MONTH FROM colonne_date) BETWEEN 1 AND 3
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Ingénieur développement logiciels Inscription : mars 2006 Messages : 291 ![]() |
Il s'agit d'une convenance personnelle : je ne suis pas partisan de l'imbrication des SELECT. Je trouve que cela nuit à la clarté.
__________________
Je ne sais qu'une chose, c'est que je ne sais rien. (Socrate) |
|
|
00
|
|
|
#7 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
Dommage, en effectuant une jointure entre vos deux requêtes, vous permettriez à l'optimiseur de votre SGBD de choisir la manière la plus adaptée de traiter votre requête et éventuellement d'en simplifier l'exécution.
En passant par une table intermédiaire, vous perdez cet avantage.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Ingénieur développement logiciels Inscription : mars 2006 Messages : 291 ![]() |
Effectivement, j'avoue tout : cela court-circuite l'optimiseur.
Difficile de préserver à la fois mon cerveau et l'optimiseur.
__________________
Je ne sais qu'une chose, c'est que je ne sais rien. (Socrate) |
|
|
00
|
|
|
#9 |
![]() ![]() |
Petit détail que j'ai omis tout à l'heure : la sélection d'un trimestre avec votre méthode sur la sélection du mois fonctionne si vous n'avez les données que d'une année civile sinon vous aurez votre calcul pour tous les trimestres de toutes les années saisies en BDD !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Merci à tous pour vos réponses, je teste ça ce soir dès mon retour et vous tiens au courant
|
|
|
00
|
|
|
#11 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Il me faut le cumul par trimestre de toutes les années de la table
|
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Dans ce cas, il faudra etoffer un peu plus la requete, genre :
Code :
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
||
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Désolé j'ai dû mal m'exprimer, en fait dans ma colonne 1er trimestre, il me faut le cumul des montants de toutes mes commandes ayant eu lieu au premier trimestre quelle que soit l'année. Mais merci quand même.
En revanche je reste bloqué, en effet il me dit que la colonne B.montant n'existe pas, pourtant elle est définie dans le JOIN.... ![]()
|
|
|
00
|
|
|
#15 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Voilà où j'en suis :
Code :
Citation:
|
|||
|
|
00
|
|
|
#16 |
![]() ![]() |
premierTrimestre est l'alias (un peu long pour un alias !) de la sous-requête après le JOIN et, effectivement, dans cette sous-requête, tu as SUM(montant) mais pas "montant". Il te manque un alias AS montant après le SUM(montant).
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Effectivement ça me résout un problème mais pour en faire apparaître un autre, que je ne comprend pas...
ERREUR: la colonne « global.montant » doit apparaître dans la clause GROUP BY ou doit être utilisée dans une fonction d'agrégat Si je rajoute mon global.montant dans mon Group By, la aussi j'ai une erreur : ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression |
|
|
00
|
|
|
#18 | |||
![]() ![]() |
Revenons au besoin exprimé :
Citation:
- le code et le texte de la famille ; - le nombre de commandes ; - la somme des montants des commandes ; - le pourcentage de cette somme par rapport à la somme de toutes les commandes ; - le montant des commandes passées au cours d'un premier trimestre. Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#19 | ||||
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
A moins que je n'aie pas compris le problème, il me semble qu'il y avait juste un détail à changer dans la requête telle que postée initialement.
En effet la sous-requête qui calcule la somme du 1er trimestre considère tous les code_famille alors qu'elle devrait considérer uniquement celui de la ligne "en cours" au niveau supérieur. Si c'est bien ça, il suffit d'ajouter une clause d'appariement sur code_famille dans le where. C'est-à-dire en remplacement de: Code :
Code :
|
||||
|
|
00
|
|
|
#20 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : décembre 2007 Messages : 48 ![]() |
Citation:
J'ai encore juste un problème, j'ai un trimestre où il n'y a aucun montant, donc mon WHERE EXTRACT(MONTH FROM date) BETWEEN 1 AND 3 ne se déclenche jamais, du coup il me zap la ligne entière de ce dossier. J'ai bien vu qu'on pouvait faire du EXIST, mais est-ce possible sur le résultat d'un WHERE, ça renvoie FALSE si il ne trouve rien ? |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com