requete sql compliquée

requete sql compliquée - SQL/NoSQL - Programmation

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
Reply

Marsh Posté le 20-08-2007 à 14:21:18   

Reply

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.

Reply

Marsh Posté le 20-08-2007 à 15:08:09    

totalement d'accord, je rajouterais même que ça sent la modélisation caca :o
 
Par ailleurs, c'est sur quel SGBD(R)?

Reply

Marsh Posté le 20-08-2007 à 15:20:01    

vu la modélisation, c'est Access :D
 
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... :D


Message édité par MagicBuzz le 20-08-2007 à 15:20:58
Reply

Marsh Posté le 20-08-2007 à 15:25:32    

Reply

Marsh Posté le 20-08-2007 à 15:32:43    

t'ain :ouch:
 
vous avez une base aussi pourrie sous DB2 ? :D
 
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.
donc j'ai mon ordre chronologique.


 
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 :
  1. select t1.idsoc, t1.annee, t1.ca, t21.ca ca1, t22.ca ca2, t23.ca ca3
  2. from t1
  3. left outer join t2 t21 on t21.idsoc = t1.idsoc and t21.annee = t1.annee and t21.trimestre = 1
  4. left outer join t2 t22 on t22.idsoc = t1.idsoc and t22.annee = t1.annee and t21.trimestre = 2
  5. left outer join t2 t23 on t23.idsoc = t1.idsoc and t23.annee = t1.annee and t21.trimestre = 3


 
Avec des outer join histoire d'avoir des valeurs à NULL si un CA partiel n'a pas été publié
 
 
Bref, ajoute une colonne trimestre.

Message cité 1 fois
Message édité par MagicBuzz le 20-08-2007 à 15:42:06
Reply

Marsh Posté le 20-08-2007 à 15:48:39    

Reply

Marsh Posté le 20-08-2007 à 15:52:25    



C'est moi au y'a de l'écho ???
 

Reply

Marsh Posté le 20-08-2007 à 15:58:38    

MagicBuzz a écrit :

t'ain :ouch:
 
...
 
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)
 
...


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é :D

Reply

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 :o

Reply

Marsh Posté le 20-08-2007 à 15:59:08   

Reply

Marsh Posté le 20-08-2007 à 15:59:40    

anapajari a écrit :


C'est moi au y'a de l'écho ???
 


nan, il a buggé :D

Reply

Marsh Posté le 20-08-2007 à 22:04:09    

ok merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed