sql join语句询问

tsaotony 2012-02-17 01:54:24
如下,有4个表,如何形成E表
a表
id num
1 3
2 7
b表
id num1
1 3
3 5
4 6
c表
id num2
1 7
4 12
d表
id num3
5 23
6 32
E表
id num num1 num2 num3
1 3 3 7 0
2 7 0 0 0
3 0 5 0 0
4 0 6 17 0
5 0 0 0 23
6 0 0 0 32
...全文
84 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
poppan007 2012-02-17
  • 打赏
  • 举报
回复


/*
1 3 3 7 0
2 7 0 0 0
3 0 5 0 0
4 0 6 12 0
5 0 0 0 23
6 0 0 0 32
*/
poppan007 2012-02-17
  • 打赏
  • 举报
回复
经测试,13楼为正解- -
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
select id,max(num) as num,max(num1) num1,max(num2) num2,max(num3) num3 from
(
select A.Id,A.num,0 num1,0 num2,0 num3 from A
union all
select B.Id,0,num1,0,0 from B
union all
select C.Id,0,0,num2,0 from C
union all
select D.Id,0,0,0,num3 from D

) E
group by E.id
order by E.id
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
select id,max(num) as num,max(num1) num1,max(num2) num2,max(num3) num3 from
(
select A.Id,A.num,0 num1,0 num2,0 num3 from A
union all
select B.Id,0,num1,0,0 from B
union all
select C.Id,0,0,num2,0 from C
union all
select D.Id,0,0,0,num3 from D

) E
group by A.id
order by E.id
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
union all的话id就有重复了
AcHerat 2012-02-17
  • 打赏
  • 举报
回复

select t.id,isnull(a.num,0) num,isnull(b.num1,0) num1,isnull(c.num2,0) num2,isnull(d.num3,0) num3
from(
select id from a
union
select id from b
union
select id from c
union
select id from d
)t left join a on t.id = a.id
left join b on t.id = b.id
left join c on t.id = c.id
left join d on t.id = d.id
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
b表
id num1
1 3
3 5
4 6
c表
id num2
1 7
4 12

id 4在num1和num2里都有的
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
为什么union all不行呢?
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
union all不行的
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
最多再加个排序
select * from
(
select A.Id,A.num,0 num1,0 num2,0 num3 from A
union all
select B.Id,0,num1,0,0 from B
union all
select C.Id,0,0,num2,0 from C
union all
select D.Id,0,0,0,num3 from D

) E order by E.id
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
先前没看清楚,6楼应该就是答案了
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
full可以但是不是我要的结果
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
看来我要出绝招了
select A.Id,A.num,0 num1,0 num2,0 num3 from A
union all
select B.Id,0,num1,0,0 from B
union all
select C.Id,0,0,num2,0 from C
union all
select D.Id,0,0,0,num3 from D
poppan007 2012-02-17
  • 打赏
  • 举报
回复
我是2k,out有错误,不能被解析,揣摩2楼和3楼的意图之后,将out改为full,依然出错- -
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
select A.Id。。。
E表里包含了4个表的id
tsaotony 2012-02-17
  • 打赏
  • 举报
回复
out join好像不行
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
select A.Id,case when A.num is null then 0 else A.num end num,
case when B.num1 is null then 0 else B.num1 end num1,
case when C.num2 is null then 0 else C.num2 end num2,
case when D.num3 is null then 0 else D.num3 end num3
from A out join B on A.id = B.id
out join C on C.id = A.id
out join D on D.id = A.id
老猫五号 2012-02-17
  • 打赏
  • 举报
回复
select A.Id,case when A.num is null then 0 else A.num end num,
case when B.num1 is null then 0 else B.num1 end num1,
case when C.num2 is null then 0 else B.num2 end num2,
case when D.num3 is null then 0 else B.num3 end num3
from A out join B on A.id = B.id
out join C on C.id = A.id
out join D on D.id = A.id

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧