A表为:领奖士兵表,数据如下:
(士兵标识 应该领奖金 实际得到奖金)
id fee gfee
1 10
2 20
3 30
4 40
其中所有gfee都是空值;
B表为:全部钱库表
(钱库标识 钱库金额)
qid qmoney
1 15
2 5
3 30要达成的目标是:将全部的钱按照士兵标识顺序分配。有多少钱就分多少钱,钱不够的话,就不分了。
对于上面这种情况,分配的最终结果就是:
id fee gfee
1 10 10
2 20 20
3 30 20
4 40 0请问这样的sql怎么写?要求是批量操作的,不要用游标和循环处理。
(士兵标识 应该领奖金 实际得到奖金)
id fee gfee
1 10
2 20
3 30
4 40
其中所有gfee都是空值;
B表为:全部钱库表
(钱库标识 钱库金额)
qid qmoney
1 15
2 5
3 30要达成的目标是:将全部的钱按照士兵标识顺序分配。有多少钱就分多少钱,钱不够的话,就不分了。
对于上面这种情况,分配的最终结果就是:
id fee gfee
1 10 10
2 20 20
3 30 20
4 40 0请问这样的sql怎么写?要求是批量操作的,不要用游标和循环处理。
解决方案 »
- plsql 连接 vpn 下的ORACLE问题!
- oracle 导入数据出错
- 存储过程报错:oracle ORA-00904 invalid identifier
- 如何在PC机上, 模拟 oracle rac 环境呢?
- 把DB2中的数据导入oracle问题(问题解决我另开贴给200)
- 造成ORACLE-29260错误的原因?(在线等待--)
- 俺原来在win2k server中装过Oracle9i,后来卸掉了,但,
- Fedora 5下安装oracle9i
- 请教一条SQL语句
- 求教sybase 向 oracle转时存储过程如何办?(在线等)
- 已知几个离散点XY坐标,如何用SQL/PLS判断其变化趋势(递增、递减 、先增后减...等~~~)
- order by反而乱序了
(case when totalfee-tfee <= 0 then 0 else totalfee-tfee end ) end case from(
select fee,gfee,xfee,lag(xfee) over(order by i) tfee,totalfee from(
select i,fee,gfee,sum(fee) over(order by i) xfee,
totalfee from(
select i,fee,gfee,totalfee from a,(select sum(qmoney) totalfee from b)
)))i就是id
2 select 1 id ,10 fee , null gfee from dual
3 union all
4 select 2 ,20 , null from dual
5 union all
6 select 3 ,30 , null from dual
7 union all
8 select 4 ,40 , null from dual
9 ),
10 b as(
11 select 1 qid,15 qmoney from dual
12 union all
13 select 2,5 from dual
14 union all
15 select 3,30 from dual
16 )
17 select id, case when xfee <= totalfee then fee else
18 (case when totalfee-tfee <= 0 then 0 else totalfee-tfee end ) end case from(
19 select id,fee,gfee,xfee,lag(xfee) over(order by id) tfee,totalfee from(
20 select id,fee,gfee,sum(fee) over(order by id) xfee,
21 totalfee from(
22 select id,fee,gfee,totalfee from a,(select sum(qmoney) totalfee from b)
23 )))
24 ; ID CASE
---------- ----------
1 10
2 20
3 20
4 0SQL>
接分!