金额分摊sql
2016-07-26 10:05
302 查看
先设定俩表
--表T1为钢水总金额表
create table T1
(
LH VARCHAR2(4) not null, --钢水炉号
P NUMBER(10,2) not null, --钢水总金额
GSL NUMBER(8,2) --总钢水量
);
alter table T1
add constraint T1 primary key (LH));
数据如下:
LH P GSL
0001 100000.00 100.11
0002 50000.00 80.99
--表T2为浇铸后信息表
create table T2
(
LH VARCHAR2(4) not null, --钢水炉号
P NUMBER(10,2), --钢水金额
GSL NUMBER(8,2) --钢水量
);
数据如下:
LH GSL P
0001 50.00
0001 40.00
0001 10.11
0002 30.00
0002 25.00
0002 25.99
根据表T1的数据来计算表T2的P字段,计算公式为:每一行的T2.P = T1.P * T2.GSL /T1.GSL 但是要注意这样计算后的结果相加与表T1的金额数会有差值的问题。
解决方案,代码如下:
--表T1为钢水总金额表
create table T1
(
LH VARCHAR2(4) not null, --钢水炉号
P NUMBER(10,2) not null, --钢水总金额
GSL NUMBER(8,2) --总钢水量
);
alter table T1
add constraint T1 primary key (LH));
数据如下:
LH P GSL
0001 100000.00 100.11
0002 50000.00 80.99
--表T2为浇铸后信息表
create table T2
(
LH VARCHAR2(4) not null, --钢水炉号
P NUMBER(10,2), --钢水金额
GSL NUMBER(8,2) --钢水量
);
数据如下:
LH GSL P
0001 50.00
0001 40.00
0001 10.11
0002 30.00
0002 25.00
0002 25.99
根据表T1的数据来计算表T2的P字段,计算公式为:每一行的T2.P = T1.P * T2.GSL /T1.GSL 但是要注意这样计算后的结果相加与表T1的金额数会有差值的问题。
解决方案,代码如下:
点击(此处)折叠或打开
-
create table T1
-
(
-
LH VARCHAR2(4) not null, --钢水炉号
-
P NUMBER(10,2) not null, --钢水总金额
-
GSL NUMBER(8,2) --总钢水量
-
);
-
INSERT INTO t1 VALUES('0001',100000.00,100.11);
-
INSERT INTO t1 VALUES('0002',50000.00,80.99);
-
-
create table T2
-
(
-
LH VARCHAR2(4) not null, --钢水炉号
-
P NUMBER(10,2), --钢水金额
-
GSL NUMBER(8,2) --钢水量
- );
-
INSERT INTO t2(lh,gsl) VALUES('0001',50.00);
-
INSERT INTO t2(lh,gsl) VALUES('0001',40.00);
-
INSERT INTO t2(lh,gsl) VALUES('0001',10.11);
-
INSERT INTO t2(lh,gsl) VALUES('0002',30.00);
-
INSERT INTO t2(lh,gsl) VALUES('0002',25.00);
-
INSERT INTO t2(lh,gsl) VALUES('0002',25.99);
-
-
SELECT t2.lh
-
,t2.gsl
-
,TRUNC(t1.p * t2.gsl / t1.gsl,2) -- 舍弃小数点2位之后
-
+(CASE WHEN ROW_NUMBER() OVER(PARTITION BY t2.lh ORDER BY t2.gsl DESC) --- 按顺序排列,前面的摊到0.01, 后面的就没有了
-
<=(t1.p - SUM(TRUNC(t1.p * t2.gsl / t1.gsl,2)) OVER(PARTITION BY t2.lh))*100
-
THEN 0.01
-
ELSE 0
-
END) AS t2_p
-
FROM t1, t2
- WHERE t1.lh = t2.lh;
-
- --查询结果如下
-
LH GSL T2_P
1 0001 50.00 49945.07
2 0001 40.00 39956.04
3 0001 10.11 10098.89
4 0002 30.00 18520.81
5 0002 25.99 16045.19
6 0002 25.00 15434
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21251711/viewspace-2122546/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21251711/viewspace-2122546/
相关文章推荐
- [转载]INFORMIX SQL语句笔记(一)按季度统计出库金额
- SQL人民币小写金额转大写
- sql语句分别按日,按周,按月,按季统计金额
- pl/sql实现金额转换为大写
- SQL金额加密
- 优化SQL脚本—求所有投资人首月投资金额
- 金额大写转小写SQL(未测试)
- SQL 小写金额转换成大写
- 【SQL】Oracle实现小写金额转换成大写的方法
- 分区统计金额sql
- 【springmvc+mybatis项目实战】杰信商贸-21.合同总金额SQL
- SQL查询金额去掉小数点后面的零,以及SUBSTRING的用法
- SQL-数据库函数mssql-数字到英文金额转换
- SQL小写金额换大写金额
- sql中函数将金额转为中文
- 求一功能实现的SQL.数据分摊的问题。
- 按部门,按月份统计总金额的SQL写法!!
- sql语句分别按日,按周,按月,按季统计金额
- 【springmvc+mybatis项目实战】杰信商贸-21.合同总金额SQL
- SQL将金额转换为汉子