咋能一句SQL就搞定?(50分)

  • 主题发起人 主题发起人 jobsxy
  • 开始时间 开始时间
J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
要求出来这个结果,比如:

姓名 工作量 比例
------------------------
张三 150 30%
李四 50 10%
王五 300 60%

比例为(本人工作量)/(总的工作量),关键就是这点比较麻烦



 
select 姓名,工作量,工作量/(select sum(工作量) from tab)*100 from tab;
 
SELECT 姓名, 工作量, SUM(A) as 比例
FROM ((select 姓名, 工作量, 工作量/SUM(工作量) as A) from 表)
GROUP BY 姓名
 
楼上两位,你们所写的确实可以实现我的功能。
不过我担心效率太低,因为我的这段SQL比较复杂,包括要统计原计划、损失。。。等等,
还有原始记录数达到2百万条。
能不能做到这样的,以首帖例子说明,张三、李西等人的数据已经统计出来了,关键在于
缺乏一个合计值,而求这个合计值能不能在已经生成的视图中进行?!否则又得引用一大堆
条件去求一个合计值了,想来也不划算。
 
declare @count integer
selct @count=sum(工作量) from tab
select 姓名,工作量,工作量/@count 比例 from tab
够优化了吧,
 
把这个 (select sum(工作量) from tab)*100
换成一个明确的值。
 
to qianwt:我觉得还不够优化,能不能求合计值的时候,仅仅在我已经SELECT结果集里统计呢?
以前例,仅仅在三条记录下求合,而不用在几百万条记录中再根据条件求合。

不好意思,多有麻烦!
 
set nocount on
select 姓名,工作量 into #temp from tab where ....//你自己加条件
declare @count integer
selct @count=sum(工作量) from #temp
set nocount off
select 姓名,工作量,工作量/@count 比例 from #temp
这下你该满足了吧,
 
拜托各人,有没有更优化的处理办法?
 
呵呵,谢谢qianwt,我先去试试

另还有一个问题,上面那段代码能否在ADOCommand的commandtext字串里写,
因为我没有写存储过程的权限
 
你试试把,不行就删了两个红行
[red]set nocount on//这行删了[/red]
select 姓名,工作量 into #temp from tab where ....//你自己加条件
declare @count integer
selct @count=sum(工作量) from #temp
[red]set nocount off//把这行删了[/red]
select 姓名,工作量,工作量/@count 比例 from #temp
 
select *, (工作量*100/(select sum(工作量) from metest)) as bbb
from metest
 
姓名 工作量 比例
------------------------
张三 150 30%
李四 50 10%
王五 300 60%
Declare @sumli Numeric(13,2)
Select @sumli=Sum(工作量) From 表1
Select 姓名,工作量,(工作量/@sumli) as 比例 From 表1

 
谢谢

liujunzhang最合我意,qianwt是用临时表的办法,在多用户的情况下可能会有问题。
 
后退
顶部