2010-12-07 8 views
0

Tenir compte 2 tablesSQL Exclure et déplacer des colonnes sur jointure externe gauche

id name 
-------- 
1 abc 
2 xyz 
3 pqr 

Tableau 2:

id type name title fid 
------------------------------------ 
1 123 qwer mng 1 
2 234 asdf mng 1 
3 234 asdfe mng 2 
1 123 qwert mng 3 

En ce moment, quand j'interroger les données

DECLARE @table1 table (id int, name varchar(10)) 
INSERT INTO @table1 
SELECT 1, 'abc' 
UNION 
SELECT 2, 'pqr' 
UNION 
SELECT 3, 'zxc' 

DECLARE @table2 table (id int, name varchar(10), etype int, title varchar(10), fid int) 
INSERT INTO @table2 
SELECT 1, 'qwer', 123, 'mngr', 1 
UNION 
SELECT 2, 'asdf', 234, 'mngr', 1 
UNION 
SELECT 3, 'asdfe', 234, 'mngr', 2 
UNION 
SELECT 1, 'qwert', 123, 'mngr', 3 



SELECT t1.Name as Emp, t2.name as Mg1, t2.title As Title1, t3.name as Mg2, t3.title as Title2 
FROM @table1 t1 
LEFT OUTER JOIN @table2 t2 ON t1.id = t2.fid AND t2.etype = 123 
LEFT OUTER JOIN @table2 t3 ON t1.id = t3.fid AND t3.etype = 234 

Je souhaite modifier cette requête afin qu'il change résultat de

Emp  Mg1  Title1  Mg2  Title2 
---------- ---------- ---------- ---------- ---------- 
abc  qwer  mngr  asdf  mngr 
pqr  NULL  NULL  asdfe  mngr 
zxc  qwert  mngr  NULL  NULL 

à

Emp  Mg1  Title1  Mg2  Title2 
---------- ---------- ---------- ---------- ---------- 
abc  qwer  mngr  asdf  mngr 
pqr  asdfe  mngr 
zxc  qwert  mngr  

Je ne sais pas comment je peux obtenir ce des idées?

+0

Cela sera plus facile si vous utilisez le langage de programmation avec lequel vous travaillez. – jwueller

Répondre

1
SELECT t1.Name as Emp, 
     coalesce(t2.name,t3.name) as Mg1, coalesce(t2.title,t3.title) As Title1, 
     case when t2.name is not null then coalesce(t3.name,'') else '' end as Mg2, 
     case when t2.title is not null then coalesce(t3.title,'') else '' end as Title2 
FROM @table1 t1 
LEFT OUTER JOIN @table2 t2 ON t1.id = t2.fid AND t2.etype = 123 
LEFT OUTER JOIN @table2 t3 ON t1.id = t3.fid AND t3.etype = 234 
Questions connexes