首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

国庆先头的一道难题,做好放假

2012-10-21 
国庆之前的一道难题,做好放假!有一批记录,想将负数自动按照正数项目所含正数的比例分摊,如下:细类金额A400

国庆之前的一道难题,做好放假!
有一批记录,想将负数自动按照正数项目所含正数的比例分摊,如下:
细类 金额  
A 400
B -100
C -200
D 500

总正数:900 总负数:-300
组合成:
A 400+4/9*(-300)
B 500+5/9*(-300)


请问各位大侠,sql有头绪吗?




[解决办法]

SQL code
这个?SELECT NAME,NUM+NUM/(SELECT SUM(NUM) FROM ABC where NUM>0)*(SELECT SUM(NUM) FROM ABC where NUM<0) FROM ABC
[解决办法]
探讨

B、C两项不需要显示了,因为它所属的负数要分摊到正数的项目里面。
而且不要用update啊,要用select,源数据不能进行修改。

[解决办法]
SQL code
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([细类] VARCHAR(1),[金额] INT)INSERT [tb]SELECT 'A',400 UNION ALLSELECT 'B',-100 UNION ALLSELECT 'C',-200 UNION ALLSELECT 'D',500--------------开始查询--------------------------SELECT [细类],[金额]+[金额]*1.0/(SELECT SUM([金额]) FROM [tb] WHERE [金额]>0)*(SELECT SUM([金额]) FROM [tb] WHERE [金额]<0) FROM [tb] WHERE [金额]>0----------------结果----------------------------/* 细类    (无列名)A    266.666666666800D    333.333333333500*/ 

热点排行