moh*_*111 1 sql t-sql sql-server
我有要求
样本数据:表A:
ID name
1 cat
2 Dog
3 Bird
Run Code Online (Sandbox Code Playgroud)
表B:
ID name
1 aaa
1 bbb
2 ccc
2 ddd
Run Code Online (Sandbox Code Playgroud)
表C:
ID name
1 xxx
1 yyy
1 zzz
2 www
Run Code Online (Sandbox Code Playgroud)
要求输出:
ID name name name
1 cat aaa xxx
1 cat bbb yyy
1 cat null zzz
2 Dog ccc www
2 Dog ddd www
3 Bird NULL NULL
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的连接
Select a.ID,a.name,b.name,c.name from @A a
full join @b b
on a.ID = b.ID
full join @c c
on b.ID = c.ID
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我采用最佳方法吗?
您可以使用窗口函数row_number内的每个分配顺序号id增加的顺序name对表b和c,然后做一个全面它们之间的连接.最后,使用a表格进行左连接:
with b1 as (
select b.*, row_number() over (partition by id order by name) as rn
from b
),
c1 as (
select c.*, row_number() over (partition by id order by name) as rn
from c
)
select a.*, t.b_name, t.c_name
from a
left join (
select coalesce(b1.id, c1.id) as id,
b1.name as b_name,
c1.name as c_name
from b1
full join c1 on b1.id = c1.id
and b1.rn = c1.rn
) t on a.id = t.id;
Run Code Online (Sandbox Code Playgroud)
这假设您需要连接表b并c基于id和位置(按name列的顺序).
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |