2010-12-07 5 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  

나는이 아이디어를 얻을 수있는 방법을 확실하지에 76,531,923,210

?

+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 
관련 문제