分类取各地区销售额占比80%的品种(28法则)

o_range 2015-10-08 08:11:17
用户要求如题,如果取所有记录里面销售额占比前80%的品种,我网上找到了解决方案,如下:
但是分组取的话就没辙了,求各位大神指点迷津~
	
declare @e_rq varchar(15),@orgid int;
select @e_rq='2015-07-31',@orgid=308;

select spbh,SUM(hsje) as hsje,ROW_NUMBER() over(order by sum(hsje) desc) as rowid
into #tb
from tb_asyy_zhfx_ygdc
where convert(varchar(7),execdate,120)= convert(varchar(7),@e_rq,120) and orgid=@orgid
group by spbh
-------------------取销售额80%的品种编号-------------------------
select spbh,hsje
into #A_spbh
from #tb a
where (select SUM(hsje) from #tb where rowid<=a.rowid)/(select SUM(hsje) from tb_asyy_zhfx_ygdc where convert(varchar(7),execdate,120)= convert(varchar(7),@e_rq,120) and orgid=@orgid)*100<80

tb_asyy_zhfx_ygdc :spbh 商品编号 hsje 销售额 dqfl 大区分类
...全文
267 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-10-08
  • 打赏
  • 举报
回复
declare @e_rq varchar(15),@orgid int;
select @e_rq='2015-07-31',@orgid=308;

-- 求出各组总计
SELECT dqfl,
SUM(hsje) as hsje
into #ta
from tb_asyy_zhfx_ygdc
where convert(varchar(7),execdate,120)= convert(varchar(7),@e_rq,120)
and orgid=@orgid
group by dqfl

-- 求各组下面的商品统计
SELECT dqfl,
spbh,
SUM(hsje) as hsje,
ROW_NUMBER() over(PARTITION BY dqfl order by sum(hsje) desc) as rowid
into #tb
from tb_asyy_zhfx_ygdc
where convert(varchar(7),execdate,120)= convert(varchar(7),@e_rq,120)
and orgid=@orgid
group by dqfl, spbh

-- 每组的前80%
select b.dqfl,
b.spbh,
b.hsje
into #A_spbh
from #tb b
JOIN #ta a
ON a.dqfl = b.dqfl
where (select SUM(b1.hsje)
from #tb b1
where b1.dqfl = b.dqfl
AND b1.rowid <= b.rowid
) / a.hsje * 100 < 80
ORDER BY b.dqfl, b.rowid

34,836

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧