当前位置: 代码迷 >> Sql Server >> 国庆先头的一道难题,做好放假
  详细解决方案

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

热度:17   发布时间:2016-04-27 10:57:43.0
国庆之前的一道难题,做好放假!
有一批记录,想将负数自动按照正数项目所含正数的比例分摊,如下:
细类 金额  
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*/
  相关解决方案