繁体   English   中英

SQL在左外部联接上排除和移动列

[英]SQL Exclude and Move columns on Left outer Join

考虑2张桌子

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

表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

当我查询数据时

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        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       

不知道我怎么能实现这个想法?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM