我有这三个桌子
表A:
code aname
----------- ----------
1 A
2 B
3 C
表B:
code bname
----------- ----------
1 aaa
1 bbb
2 ccc
2 ddd
表C
code cname
----------- ----------
1 xxx
1 yyy
1 zzz
2 www
如何使用单个查询实现这样的输出?
code aname bname cname
----------- ---------- ---------- ----------
1 A aaa xxx
1 A bbb yyy
1 A NULL zzz
2 B ccc www
2 B ddd NULL
3 C NULL NULL
有什么建议么 ?
谢谢
看起来您希望表B
和的“列表”垂直C
。通过使用,这是可行的row_number()
。但是,诀窍是在没有匹配项的情况下获得第三行。
这是一种方法。它使用完整的外部联接将b
和c
名称组合在一起。然后,它left join
用于引入a
记录。
select a.code, a.name, bc.bname, bc.cname
from a left join
(select coalesce(b.code, c.code) as code, bname, cname
from (select code, bname, NULL as cname,
row_number() over (partition by code order by code) as seqnum
from b
) b full outer join
(select code, NULL as bname, cname,
row_number() over (partition by code order by code) as seqnum
from c
) c
on b.code = c.code and b.seqnum = c.seqnum
) bc
on bc.code = a.code;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句