100 分 求一sql语句

imho888 2012-05-08 08:45:28
两张表 A, B 字段一样如下

f1 f2 f3 f4 time



A 表数据

f1 f2 f3 f4 time
1 2 12:00
3 4 13:00
5 7 14:00

B 表数据

f1 f2 f3 f4 time
12 13 12:00
15 16 13:00


得到查询结果如下:
f1 f2 f3 f4 time
1 2 12 13 12:00
3 15 4 16 13:00
5 7 14:00


相当于合并两个表,空数据的地方取另一个表的数据来填充。

我用的是orcal数据库。真心求一sql语句,非常感谢。

分不够我可以再开贴加
...全文
257 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxhshuaiman 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
SQL code


select nvl(a.f1,b.f1)f1,nvl(a.f2,b.f2)f2,nvl(a.f3,b.f3)f3,nvl(a.f4,b.f4)f4,a.time from A a
left join B b on a.time=b.time order by a.time
[/Quote]

不错不错 很简洁

不过12楼是最终结果
coolkisses 2012-05-10
  • 打赏
  • 举报
回复
上面的SQL,只有time是唯一时,成立。
大家就不考虑一下,如果 time 值有重复的吗?
  • 打赏
  • 举报
回复
还木结贴。、。
  • 打赏
  • 举报
回复
最终版 不管是有没对应时间 有没重复时间 应该都可以了

一个时间段的同一个字段应该不会出现2个值吧?

create table t1(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into t1 values (1,2,'','','12:00');
insert into t1 values (3,'','4','','13:00');
insert into t1 values (5,7,'','','14:00');
insert into t1 values ('','',1,'','14:00');

create table t2(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into t2 values ('','',12,13,'12:00');
insert into t2 values ('',15,'',16,'13:00');
insert into t2 values (11,'','',12,'15:00');
insert into t2 values ('',1,3,'','15:00');
commit;


select wm_concat(a.f1||b.f1)f1,
wm_concat(a.f2||b.f2)f2 ,
wm_concat(a.f3||b.f3)f3 ,
wm_concat(a.f4||b.f4)f4 ,
decode(a.time,'',b.time,a.time) time
from t1 a full join t2 b on a.time=b.time
group by decode(a.time,'',b.time,a.time)

f1 f2 f3 f4 time
--------------------------------------------
1 1 2 12 13 12:00
2 3 15 4 16 13:00
3 5 7 1 14:00
4 11 1 3 12 15:00

  • 打赏
  • 举报
回复
如果B表数据多A表的话 貌似要变下


create table t1(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into t1 values (1,2,'','','12:00');
insert into t1 values (3,'','4','','13:00');
insert into t1 values (5,7,'','','14:00');

create table t2(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into t2 values ('','',12,13,'12:00');
insert into t2 values ('',15,'',16,'13:00');
insert into t2 values (11,'','',12,'15:00');
commit;


select a.f1||b.f1 f1,a.f2||b.f2 f2 ,a.f3||b.f3 f3 ,a.f4||b.f4 f4 ,decode(a.time,'',b.time,a.time) time
from t1 a full join t2 b on a.time=b.time
order by a.time


f1 f2 f3 f4 time
--------------------------------------------
1 1 2 12 13 12:00
2 3 15 4 16 13:00
3 5 7 14:00
4 11 12 15:00

java_xiao_cainiao 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
SQL code


select nvl(a.f1,b.f1)f1,nvl(a.f2,b.f2)f2,nvl(a.f3,b.f3)f3,nvl(a.f4,b.f4)f4,a.time from A a
left join B b on a.time=b.time order by a.time
[/Quote]
至少楼主提供的这么几条数据,这语句应该是完全可以的,这语句是智商的体现,哈哈
a29374963 2012-05-08
  • 打赏
  • 举报
回复
牛逼啊
jdsnhan 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

SQL code

select nvl(a.f1,b.f1)f1,nvl(a.f2,b.f2)f2,nvl(a.f3,b.f3)f3,nvl(a.f4,b.f4)f4,a.time from A a
left join B b on a.time=b.time order by a.time
[/Quote]

+1
物润声无 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

SQL code

select nvl(a.f1,b.f1)f1,nvl(a.f2,b.f2)f2,nvl(a.f3,b.f3)f3,nvl(a.f4,b.f4)f4,a.time from A a
left join B b on a.time=b.time order by a.time
[/Quote]
+
  • 打赏
  • 举报
回复
借用LS数据

create table TT1(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into TT1
select '1' f1,'2' f2,'' f3,'' f4 ,'12:00' time from dual
union select '3' ,'', '4','', '13:00' from dual
union select '5','7','','','14:00' from dual;

create table TT2(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into TT2
select '' f1,'' f2,'12' f3,'13' f4,'12:00' time from dual
union select '','15','','16','13:00' from dual;
commit;

--查询
select a.f1||b.f1,a.f2||b.f2,a.f3||b.f3,a.f4||b.f4,a.time
from tt1 a full join tt2 b on a.time=b.time
order by a.time

f1 f2 f3 f4 time
--------------------------------------------
1 1 2 12 13 12:00
2 3 15 4 16 13:00
3 5 7 14:00

bayueguihuaxiang 2012-05-08
  • 打赏
  • 举报
回复
建议创建两个中间表,然后使用merge进行合并,最后查询数据。
zlb_chen 2012-05-08
  • 打赏
  • 举报
回复

create table TT1(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into TT1
select '1' f1,'2' f2,'' f3,'' f4 ,'12:00' time from dual
union select '3' ,'', '4','', '13:00' from dual
union select '5','7','','','14:00' from dual;

create table TT2(f1 varchar2(20),f2 varchar2(20),f3 varchar2(20),f4 varchar2(20),time varchar2(20) );
insert into TT2
select '' f1,'' f2,'12' f3,'13' f4,'12:00' time from dual
union select '','15','','16','13:00' from dual;
commit;

select sum(F1) F1,sum(F2) F2,sum(F3) F3,sum(F4) F4,time from (
select case when a.F1 is null then b.F1 end F1,
case when a.F2 is null then b.F2 end F2,
case when a.F3 is null then b.F3 end F3,
case when a.F4 is null then b.F4 end F4,a.time from tt1 a left outer join tt2 b
on a.time=b.time
union
select case when b.F1 is null then a.F1 end F1,
case when b.F2 is null then a.F2 end F2,
case when b.F3 is null then a.F3 end F3,
case when b.F4 is null then a.F4 end F4,a.time from tt1 a left outer join tt2 b
on a.time=b.time) group by time
hupeng213 2012-05-08
  • 打赏
  • 举报
回复
select sum(nvl(f1,0)),sum(nvl(f2,0)),sum(nvl(f3,0)),sum(nvl(f4,0)),time from (
select f1,f2,f3,f4,time from a
union all
select ... from b
)
group by time
xpingping 2012-05-08
  • 打赏
  • 举报
回复
或者
select max(f1),
max(f2),
max(f3),
max(f4),
time from
(select f1 ,f2 ,f3 ,f4 ,time from A
union all
select f1 ,f2 ,f3 ,f4 ,time from B)
group by time
xpingping 2012-05-08
  • 打赏
  • 举报
回复
select decode(sum(to_number(f1)),0,null),
decode(sum(to_number(f2)),0,null),
decode(sum(to_number(f3)),0,null),
decode(sum(to_number(f4)),0,null),
time from
(select f1 ,f2 ,f3 ,f4 ,time from A
union all
select f1 ,f2 ,f3 ,f4 ,time from B)
group by time
槑党--一缕风 2012-05-08
  • 打赏
  • 举报
回复

select nvl(a.f1,b.f1)f1,nvl(a.f2,b.f2)f2,nvl(a.f3,b.f3)f3,nvl(a.f4,b.f4)f4,a.time from A a
left join B b on a.time=b.time order by a.time

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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