Mettre des lignes en colonnes

Mettre des lignes en colonnes - SQL/NoSQL - Programmation

Marsh Posté le 23-11-2006 à 12:12:25    

Bonjour, je suis sous DB2 et j'ai une table comme suit :
 
Table1.
ID    TYPE
A       1
A       2
B       1
 
J'aimerai faire une requete qui me donne le résultat suivant :
ID    FlagType1    FlagType2
A        OUI             OUI              -> car l'ID A fait partie du type 1 et du type 2
B        OUI             NON             -> car l'ID B fait partie dy type 1 mais pas du type 2
 
C'est pour faire une vue au final.
 
Merci pour votre aide

Reply

Marsh Posté le 23-11-2006 à 12:12:25   

Reply

Marsh Posté le 23-11-2006 à 12:28:49    

je serais toi, je ferai un select avec order by ID et un tri sur type.
 
Comme ça tu auras des lignes comme ça:
A 1
A 2
B 1
C 2
 
Tout n'aura plus que a faire des tests à l'affichage.  Je ne voix pas d'autres solutions

Reply

Marsh Posté le 23-11-2006 à 12:48:18    

Bonjour ami jemellien,
merci pour ta réponse mais je crains qu'elle ne m'aide pas beaucoup :-(
Je dois arriver absolument au résultat que j'avais mis dans ma question.
Voici ce que j'avais essayé :
Select t1.type, t2.type
from table t1, table t2
where t1.id = t2.id
and t1.type = 1 and t2.type = 2;
 
mais ca ne fonctionne que si j'ai toujours 2 lignes pour chaque ID. Ensuite pour avoir un OUI ou NON dans ma colonne j'aurai fait un CASE.
 
Est-ce un bon début?

Reply

Marsh Posté le 23-11-2006 à 12:53:07    

je voix pas alors
 
tu étais de jemelle aussi?

Reply

Marsh Posté le 23-11-2006 à 13:53:23    

oui y a 3 ans

Reply

Marsh Posté le 23-11-2006 à 13:55:39    

donc, il se peut que l'on se connaisse! qui es-tu
 
As tu trouvé une solution?  j'ai demandé autour de moi et ils ne voyent pas trop

Reply

Marsh Posté le 23-11-2006 à 23:03:42    

un truc pas beau mais qui a le merite d'exister a 23h00
 
 
select a.id,nvl(b.flag,'NON'),nvl(c.flag,'NON')
from
(select distinct id
from t1) a,
(select distinct id,'OUI' flag
from t1
where type = 1) b,
(select distinct id,'OUI' flag
from t1
where type = 2) c
 
bon c'est tres moche et sur des enormes tables c'est code tout pourri, mais faut voir ta situation, perso je le ferai sans doute en sql dynamique mais faut voir tes data, puis db2 je n'y connais rien en optimisation.

Reply

Marsh Posté le 01-12-2006 à 21:36:50    

Salut,
j'avais trouvé une solution mais pas trop eu le temps de la poster, je vous fais ca lundi.
chepa, je crois que je vois qui tu es effectivement, MP-moi si tu veux

Reply

Marsh Posté le 01-12-2006 à 22:06:42    

Regarde si DB2 supporte le "full join".
SQL Server 2005 le supporte maintenant (il était temps, ça fait partie de SQL92 :o)
 
Ce qui donne une requête infiniment plus performante et plus jolie (bon, si on veut) :


select * from table_1;
 
select  
 isnull(t1.id, t2.id) id,  
 case isnull(t1.type, 0)  
  when 0 then 'NON'  
  else 'OUI'  
 end type1,  
 case isnull(t2.type, 0)  
  when 0 then 'NON'  
  else 'OUI'  
 end type2
from table_1 t1
full join table_1 t2 on t2.id = t1.id and t1.type = 1 and t2.type = 2
where isnull(t1.type, 1) = 1
and isnull(t2.type, 2) = 2;


 


id   type
---- ----
A    1
A    2
B    1
C    2
 
(4 row(s) affected)
 
id   type1 type2
---- ----- -----
A    OUI   OUI
B    OUI   NON
C    NON   OUI
 
(3 row(s) affected)

Reply

Marsh Posté le 04-12-2006 à 20:57:59    

Bien joué, très impressionnant.
Oui le FULL_OUTER_JOIN existe en DB2
Merci à toi

Reply

Sujets relatifs:

Leave a Replay

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