|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Bonjour,
Puisqu'un exemple vaut 1000 mots... Code :
À la limite, je pourrais mettre les conditions de DAT_DER_COTIS dans la sous-requête directement, mais puisque le code est généré de façon dynamique c'est plus facile d'ajouter une condition à la fin de la requête... Des idées ? Merci |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
On dirait que tu ne connais pas les jointures !
Et ta requête est tellement tarabiscotée que je n'arrive pas à en comprendre le sens. Quel est le but de la requête, exprimé en français ? Quelle est la structure des tables impliquées ? Quel est ton SGBD ? Un petit exemple de données et le résultat attendu aide aussi à t'aider. Bref, applique les règles de ce forum.
__________________
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
|
|
|
#3 | ||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Ouin... je me disais aussi que ça ne serait pas clair.
Voilà le même exemple (un peu plus bas) avec moins de "tarabiscotage" (c'est un mot ça ?). Je suis peut-être un peu trop paranoïaque. Les dates "en clair" sont des paramètres. Le but est de récupérer la date de dernière cotisation (ie. date de la dernière transaction) et de l'inclure avec le dossier du transporteur. Pour ce qui est du SGBD, j'utilise DB2, mais c'est un problème SQL alors que j'utilise lui ou un autre ça ne change pas grand chose. Pour l'exemple de résultat, ce sera un peu difficile à te le donner... Code :
|
||
|
|
00
|
|
|
#4 | ||||
![]() ![]() |
Ce n'est pas encore très clair tout ça ! Et effectivement, tu ne connais pas la syntaxe des jointures en vigueur depuis 1992 ; il serait temps de s'y mettre !
![]() Citation:
Citation:
Comme tu n'as toujours pas donné la structure des tables concernées, ça reste un jeu de devinettes ! ![]() Est-ce que la requête suivante te donnerait la date de la dernière cotisation par dossier de transporteur ? 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
|
|
|
#5 | ||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Un égal fait une jointure interne implicite, non ?
mais bon, je ne veux pas commencer ce débat ici. Dans la requête que tu m'as donné, tu me donnes la date la plus récente de la table TRANS (ou transaction). Ce que je veux, c'est la date de la transaction la plus récente (la date de la dernière transaction de type CATOF ou NITOF. D'où la sous-requête et la sous sous-requête. Ensuite, je veux inclure les données du transporteur (DOSS_CAR et TAXPAYER). Mais bon, je crois que je devrai constituer la requête au complet pour chaque situation dans le programme. Car, je ne crois pas que je peux le faire à la fin de la requête simplement. Soit, Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Ben au lieu de poster 25 fois la même requête, poste la description de ton modèle des données (que sont ces tables dont nous ignorons à la fois leurs champs, leurs relations et leur rôle ?) ainsi qu'un jeu de données de test, afin qu'on comprenne ce que tu veux faire.
Ta requête est absolument imbittable, et ça doit faire 10 ans au minimum que j'ai pas vu de select dirtectement à la place d'un champ : cette écriture est systématiquement remplaçable par une jointure ou une sous-requête au niveau du from, bien plus lisible. |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
salut,
DB2 supporte les fonctions de fenêtrage si votre version n'est pas trop vieille du coup .. Code :
edit : mais bon votre clause de restriction sur la date est tellement bizarre que je ne vois pas l’intérêt de tout ce process .... |
||
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
À bien y penser peut-être que je peux prendre ma sous-requête et la remplacer par une jointure dans le FROM, mais celle avec le "max" je ne crois pas, sans passer par le fenêtrage.
En esssayant avec la condition dans la sous-requête, ça ne fait pas ce que je veux non plus (ne me donne pas la date, mais me donne l'enregistrement). Un "outer join" devrait être plus approprié. Pour ce qui est du fenêtrage, je n'ai jamais fait ça, mais en grande partie ça ressemble à ce que je veux faire. Je suis pas sûr si Powerbuilder le supporte par contre... La version de DB2 que j'utilise est 9.5. Je vais voir si je peux transformer la requête en plusieurs morceaux (le principe du fenêtrage dans le fond). Je vais devoir y repenser. Pour ce qui est de la structure, en gros: Clés primaires de TAXPAYER: - TAXPAYER.TXPYR_JUR - TAXPAYER.TXPYR_ID Clés primaires de DOSS_CAR: - DOSS_CAR.TXPYR_ID - DOSS_CAR.JUR_CODE Clés primaires de PERC_MANU: - PERC_MANU.JUR_CODE - PERC_MANU.TXPYR_ID Clés primaires de TRANS: - TRANS.JUR_CODE - TRANS.TXPYR_ID - TRANS.TRANS_NO DOSS_CAR est lié avec TAXPAYER (1,1) DOSS_CAR est lié avec TRANS(1,N) PERC_MANU est flottant |
|
|
00
|
|
|
#9 | ||||
|
Invité régulier
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Bon j'ai essayé une autre approche axée sur les jointures. Et c'est bien un "inner join" que je veux. Je ne veux pas les enregistrements qui n'ont pas de date de dernière cotisation (TRANS.DAT_EFFEC).
Je ne sais pas trop ce qui ne fonctionne pas (peut-on faire une sous-requête dans une jointure ?) --> voir 1ère citation EDIT RÉSOLU: J'ai réussi à faire ce que je veux en déplacant la sous-requête de la jointure dans le where. Finalement, je m'étais pas mal compliqué la vie pour pas grand chose... --> voir 2e citation Code en erreur: Code :
Code :
Merci ! |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com