2010-12-07 11 views
0

は、2つのテーブルSQL除外すると

を考えてみましょう左外に列を移動:

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 

を今私はデータを照会するとき

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 

私はこのクエリを変更したいです結果を変更するには

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

私は、このいずれかのアイデアを実現することができますどのようにわからないの

+0

これは、使用しているプログラミング言語を使用して簡単になります。 – jwueller

答えて

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 
関連する問題