requete sql compliquée - SQL/NoSQL - Programmation
Marsh Posté le 20-08-2007 à 15:03:31
pas assez de champs dans t2 pour différencier les lignes.
il faudrait au moins que tu rajoutes une date, un trimestre ou autre, qui permette de savoir qui est ca1, ca2 et ca3...
parceque pour le moment y'a pas moyen de savoir qui fait quoi.
Marsh Posté le 20-08-2007 à 15:08:09
totalement d'accord, je rajouterais même que ça sent la modélisation caca
Par ailleurs, c'est sur quel SGBD(R)?
Marsh Posté le 20-08-2007 à 15:20:01
vu la modélisation, c'est Access
sous mysql, il nous aurait posté un bout de code PHP (si possible sans le moindre SQL) en demandant ce qui n'allait pas dans sa requête...
Marsh Posté le 20-08-2007 à 15:32:43
t'ain
vous avez une base aussi pourrie sous DB2 ?
bon, trouve un moyen d'ajouter un champ dans T2, histoire de savoir dans quel order chronologique au moins lire les lignes. si possible, en trimestres, puisque j'imagine que c'est de résultats trimestrials qu'il s'agit (sinon d'aurait plus de 3 colonnes)
sans ça, ça reste possible, mais tu va devoir partir sur des suppositions pourries, genre :
Citation : en fait, si c'est bien un CA, c'est donc forcément plus grand au fur et à mesure des publications. |
mais avec seulement l'ordre chronologique, tu va te lancer dans une requête de 50 lignes qui va mettre à genoux le serveur (même si c'est du DB2) pendant deux heures pour sortir 3 lignes (à vue de nez 3 niveaux d'imbrications de sous-requêtes, super redondantes, et avec des morceaux de grumeaux dedans genre des regroupements, des >... et j'imagine qu'une société peut ne pas publier de résultat partiel, ou n'en produire qu'un seul à mi-exercice... donc en plus ça va être en jointures externes... alors le plus fun c'est que tu sauras pas dire si ca1 a été publié au mois de mars ou au mois de septembre !)
en fait, voilà le principe :
ca1 veut dire que ca1 = min(t2.ca) where c'est la bonne année et la bonne soc.
mais pour ca2 ça se corse, parceque ça va être min(t2.ca) where c'est la bonne année et la bonne soc, mais où t2.ca > min(t2.ca) where c'était bon...
et pour ca3, encore une couche !
le plus fun, c'est que pour chaque, en plus ça correspond à une jointure supplémentaire : tu dois joindre 3 fois t2 à t1 pour faire tes 3 colonnes.
alors que si t'as une notion de trimestre dans ta table...
Code :
|
Avec des outer join histoire d'avoir des valeurs à NULL si un CA partiel n'a pas été publié
Bref, ajoute une colonne trimestre.
Marsh Posté le 20-08-2007 à 15:52:25
ReplyMarsh Posté le 20-08-2007 à 15:58:38
MagicBuzz a écrit : t'ain |
Une année, ça n'a pas 4 trimestres? Cela dit, vu que t'as écrit "trimestrials" et "d'aurait", j'imagine que t'étais bourré
Marsh Posté le 20-08-2007 à 15:59:08
j'imagine que la publication du ca partiel du 4° trimestre, c'est le ca final
Marsh Posté le 20-08-2007 à 15:59:40
Reply
Marsh Posté le 20-08-2007 à 14:21:18
Bonjour,
J'ai une requête un peu compliquée à faire et je sais pas comment m'y prendre, voila mon problème:
j'ai une table T1 et une table T2 T1(idsoc,annee,ca) et T2(id,idsoc,annee,ca_partiel) , telle que T1.idsoc=T2.idsoc et T1.annee=T2.annee.
(sachant que (id) provient d'une autre table.)
dans ce shchéma pour la même année et pour la même société il peut y avaoir plusieurs chiffre d'affaire partiels
supposns qu'ils sont au nombre de 3 et appeleons les ca1 ca2 ca3
mon ut est de construire une requête qui me permet d'avoir en sortie une table T telle que
T (idsoc,annee,ca,ca1,ca2,ca3)
merci d'avance
Message édité par root76 le 20-08-2007 à 14:56:31