|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : octobre 2002 Messages : 227 ![]() |
Bonjour,
j'aimerais savoir s'il était possible de créer une vue contenant plusieurs select (en tant que colonne) et SURTOUT que ces SELECT me ramènent plusieurs colonnes... Un exemple concret pour que cela soit plus clair : j'aimerais pour 2011 : 1 enregistrement par nom et prenom ainsi que (som) et (bdg) pour les 2 années précédentes Tous ces éléments se trouvent dans une MEME table/vue qui contient - Toujours un seul élément(nom/prénom) pour 2011, - Mais peut-être rien en 2010 et peut-être rien en 2009 Code :
car j'indique plusieurs colonnes dans mes 2 derniers SELECT y-a-t'il un moyen de créer une vue ce ce genre ? Pour que cela fonctionne je dois dédoubler les 2 SELECT(Avec une seule colonne) ..PAS du tout perfomant! Surtout que ma vue finale va contenir une vingtaine de colonnes. Pouvez-vous m'aider ? Merci. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
mets les sous select dans la clause FROM
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : octobre 2002 Messages : 227 ![]() |
je vais essayer,
mais je n'ai accès à la base de données que lundi matin pourrais-je avoir un exemple concret/simple, car je n'ai jamais utilisé ce type de "mécanisme" dans la création de mes vues. Merci. |
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Désolé, j'ai dit une connerie. Après avoir testé, ça ne marche pas (on ne peut pas référencer une autre table dans un sous select au niveau From.
2 solutions : Soit une condition sur les 3 années, avec un decode et un group by, soit une concaténation bdg ||'.'|| som dans les sousrequêtes, et un split dans un select au dessus 1ere solution (attention, A finir car on ne teste pas s'il existe une ligne en 2011) Code :
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
La requête scalaire ne peut ramener qu'une seule valeur d’une seule colonne. Il est très facile de contourner cette restriction en utilisant des types objet mais ce n’est pas très performant. Mais comme ce type de requête est équivalent à un outer join il suffit donc de l’utiliser:
Code :
|
||
|
|
10
|
|
|
#6 | ||
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Avec une fonction analytique sinon :
Code :
Edit> Attention cette requête est incorrecte si il y a des trous dans la présence des données depuis 2011 (ex: données en 2011 et 2009 mais pas 2010). Par contre cela fonctionne si les données les plus récentes sont présentes (ex: données en 2011 et 2010 mais pas 2009).
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Ta requête ne fonctionne que si la clé c'est "nom, prenom, année", si jamais tu as mois en plus dans la clé, ça ne marchera pas.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Oui mais ce n'est pas précisé dans l'énoncé et il est facile de l'adapter si la clef est différente.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Je ne suis pas sur.
De plus selon l'énoncé, une des années peut ne rien ramener comme données, dnas ce cas, le lag(1) ne va pas ramener la bonne année.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Je ne vois vraiment pas en quoi l'ajout du mois peut gener.
Je viens de faire un test (rapide, dans un cas nominal uniquement) et je peux sans souci remonter les valeurs des années 2010 et 2009 pour chaque mois de 2011 traité. Par contre tu as raison si il manque des données en 2010. J'avais testé avec des données manquantes en 2009, mais pas ce cas. A voir donc si ce cas est fonctionnellement possible dans le cas de l'auteur mais je vais ajouter la restriction sur mon post. Merci à toi pour la remarque.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com