请教高手两个表交叉求和的问题,以下能不能只用一个SQL语句完成,结果其实就相当于在两根时间轴上求交集的和,但是用sql语句的话能用一个语句实现吗?
谢谢了!!!
table 1:
name: test1
value\field eff_date disc_date price
2005-5-1 2005-10-1 100
2005-10-2 2005-12-31 150
2006-1-1 2006-7-1 200
2006-7-2 2006-12-30 250
2006-12-31 2008-12-31 300
table 2:
name: test2
value\field eff_date disc_date price
2005-5-10 2005-6-1 500
2005-6-2 2005-9-1 600
2005-9-2 2005-11-30 700
2005-11-31 2006-2-1 800
2006-2-2 2006-4-1 900
2006-4-2 2006-7-1 1000
2006-7-2 2008-12-31 1100求和的结果是:test1+test2
value\field eff_date disc_date price
2005-5-1 2005-5-10 100+0=100
2005-5-10 2005-6-1 100+500=500
2005-6-2 2005-9-1 100+600=700
2005-9-2 2005-10-1 100+700=800
2005-10-2 2005-11-30 150+700=850
2005-11-31 2005-12-31 150+800=950
2006-1-1 2006-2-1 200+800=1000
2006-2-1 2006-4-1 200+900=1100
2006-4-2 2006-7-1 200+1000=1200
2006-7-2 2006-12-30 250+1100=1350
2006-12-31 2008-12-31 300+1100=1400
谢谢了!!!
table 1:
name: test1
value\field eff_date disc_date price
2005-5-1 2005-10-1 100
2005-10-2 2005-12-31 150
2006-1-1 2006-7-1 200
2006-7-2 2006-12-30 250
2006-12-31 2008-12-31 300
table 2:
name: test2
value\field eff_date disc_date price
2005-5-10 2005-6-1 500
2005-6-2 2005-9-1 600
2005-9-2 2005-11-30 700
2005-11-31 2006-2-1 800
2006-2-2 2006-4-1 900
2006-4-2 2006-7-1 1000
2006-7-2 2008-12-31 1100求和的结果是:test1+test2
value\field eff_date disc_date price
2005-5-1 2005-5-10 100+0=100
2005-5-10 2005-6-1 100+500=500
2005-6-2 2005-9-1 100+600=700
2005-9-2 2005-10-1 100+700=800
2005-10-2 2005-11-30 150+700=850
2005-11-31 2005-12-31 150+800=950
2006-1-1 2006-2-1 200+800=1000
2006-2-1 2006-4-1 200+900=1100
2006-4-2 2006-7-1 200+1000=1200
2006-7-2 2006-12-30 250+1100=1350
2006-12-31 2008-12-31 300+1100=1400
解决方案 »
- 有点无语的面试题
- 关于oracle表数据更新问题
- Oracle 9i中,在客户端能否创建数据库和创建资料档案库?
- Oracle的日期时间字段如何分别取出年、月、日存到3个新的字段?
- 修改oracle中的package名后
- 一个PL/SQL的问题
- 这条update语句出错了,系统总是提示:[Microsoft][ODBC driver for Oracle][Oracle]ORA-01861: 文字与格式字符串不匹配
- 表空间问题
- oracle数据移植
- 有谁知道oracle各个版本的发布时间和每个版本同上一个版本新增加的功能区别吗吗?
- 有没有最方便的导入dbf到oracle的方法
- 通过临时表生成查询结果。多人同时访问时如何防止临时表被清空?
union
select * from test2
select value, eff_date, price
from
(select r.value, r.eff_date, sum(r.price) price
rank() () (partition by r.value order by r.eff_date) x from
(
select * from test1
union
select * from test2
) r )