检斤单
车号 过磅时间 净重 合同编号
111111 2013-03-01 36.90 H001
222222 2013-03-04 38.25 H001
333333 2013-03-07 40.23 H001
444444 2013-03-09 38.40 H001合同
编号 单价
H001 1080补充协议
编号 生效时间 合同编号 单价
B001 2013-03-03 H001 1070
B002 2013-03-05 H001 1060
B003 2013-03-08 H001 1040需要结果
车号 过磅时间 净重 合同编号 单价 总金额
111111 2013-03-01 36.90 H001 1080 39852
222222 2013-03-04 38.25 H001 1070 40927.5
333333 2013-03-07 40.23 H001 1060 42643.8
444444 2013-03-09 38.40 H001 1040 39936
这样的SQL应该怎样实现?多表
车号 过磅时间 净重 合同编号
111111 2013-03-01 36.90 H001
222222 2013-03-04 38.25 H001
333333 2013-03-07 40.23 H001
444444 2013-03-09 38.40 H001合同
编号 单价
H001 1080补充协议
编号 生效时间 合同编号 单价
B001 2013-03-03 H001 1070
B002 2013-03-05 H001 1060
B003 2013-03-08 H001 1040需要结果
车号 过磅时间 净重 合同编号 单价 总金额
111111 2013-03-01 36.90 H001 1080 39852
222222 2013-03-04 38.25 H001 1070 40927.5
333333 2013-03-07 40.23 H001 1060 42643.8
444444 2013-03-09 38.40 H001 1040 39936
这样的SQL应该怎样实现?多表
那么SQLcode应该类似如下:select a.合同号,a.过磅时间,a.净重,price_zone.单价 ,a.净重*price_zone.单价 money
from 检斤单 a
join
(
select 合同号,lead(生效日期) over(order by 生效日期 desc) startday,
生效日期 endday,单价
from (
SELECT 合同号,19000101 生效日期,单价 from 合同
union all
SELECT 合同号,30000101 生效日期,单价 from 合同
union all
select 合同号,生效日期,单价 from 补充协议
)
) price_zone on price_zone.合同号=a.合同号
and a.过磅时间 between price_zone.startday and price_zone.endday
更好的方式是定义一个视图,避免代码的复杂,视图可以是普通的,也可以是物化的。