要求;按编码分组查询 商品销售ABC分析报表 按数量统计A类 销量占 5%
B类 销量占 20%
C类 销量占 75% 商品编码 销量
001 5
002 8
003 3
002 8
003 2
005 8
002 1
003 5
002 12
001 1
005 5结果应该是
商品编码 销量 ABC
........................
.
.
.
...
B类 销量占 20%
C类 销量占 75% 商品编码 销量
001 5
002 8
003 3
002 8
003 2
005 8
002 1
003 5
002 12
001 1
005 5结果应该是
商品编码 销量 ABC
........................
.
.
.
...
ABC分类法又称巴雷托分析法,它是根据在技术或经济方面的主要特征,进行分类排队,分清重点和一般,从而有区别地确定管理方式的一种分析方法。由于它把被分析的对象分成A 、B、 C 三类,所以又称为ABC分析法。把ABC分类方法应用到销售商品比重统计中,把销售额百分比累计到70%~80%的品种归为A类,A类下面占总额15%~20%的品种归为B类,余下的品种归为C类。这样能方便统计出占80%销售额比重的A类别商品和只占5%销售比重的C类别商品。这样就能使企业根据ABC分析的结果,对ABC三类商品采取不同的管理策略。同样道理,此种分析方法也可以应用到销售利润的分析之中。
商品编码 销量 ABC
..................... A
. A
. B
. B
. B
. B
. B
. C
. C
. C
. C
. C
. C
.
.
...
declare @sum1 int
select @sum1 = sum(销量) from tbselect 商品编码,sum(销量) as 销量
,case
when sum(销量)/@sum1 >0.75 then 'A'
when sum(销量)/@sum1 between 0.75 and 0.2 then 'B'
ELSE 'C'
END as ABC
from tb
group by 商品编码
select @total = sum(销量) from tbselect 商品编码,sum(销量) as 销量
,[ABC]=case
when sum(销量)/@total <0.05 then 'A'
when sum(销量)/@total between 0.05 and 0.2 then 'B'
ELSE 'C' END
from tb
group by 商品编码
select @total = sum(销量) from tb --为什么把 汇总放到变量里, 放到查询里不是更好,,如果在查询汇总时 ,又有销售,那下面的查询不是不准确,,?select 商品编码,sum(销量) as 销量
,[ABC]=case
when sum(销量)/@total <0.05 then 'A'
when sum(销量)/@total between 0.05 and 0.2 then 'B'
ELSE 'C' END
from tb
group by 商品编码这样觉得怎样 :select 商品编码,sum(销量) as 销量
,[ABC]=case
when sum(销量)/(select sum(销量) from tb)<0.05 then 'A'
when sum(销量)/(select sum(销量) from tb) between 0.05 and 0.2 then 'B'
ELSE 'C' END
from tb
group by 商品编码
if object_id('T')is not null
drop table t
go
create table t (商品编码 int,销量 decimal(6,2))
insert into t select 001,5
union all select 002,8.00
union all select 003,3.00
union all select 002,8.00
union all select 003,2.00
union all select 005,8.00
union all select 002,1.00
union all select 003,5.00
union all select 002,12.00
union all select 001,1.00
union all select 005,5.00
go
with c_t AS
(
select 商品编码,sum(销量) 销量,b=(select sum(销量) from t) from t group by 商品编码
),
C_J AS
(
select 商品编码,销量/b as 销量 from c_t
)
SELECT 商品编码,销量=(case when 销量<0.20 then 'A' when 销量<0.75 then 'B' else 'C' end) FROM C_j
order by 销量1 A
3 A
5 B
2 B
-- Author: happyflsytone
-- Date:2008-10-27 23:45:42
-------------------------------------- Test Data: ta
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
Go
CREATE TABLE ta(商品编码 NVARCHAR(3),销量 INT)
Go
INSERT INTO ta
SELECT '001',5 UNION ALL
SELECT '002',8 UNION ALL
SELECT '003',3 UNION ALL
SELECT '002',8 UNION ALL
SELECT '003',2 UNION ALL
SELECT '005',8 UNION ALL
SELECT '002',1 UNION ALL
SELECT '003',5 UNION ALL
SELECT '002',12 UNION ALL
SELECT '001',1 UNION ALL
SELECT '005',5
GO
--Start
select 商品编码,sum(销量) as 销量
,case
when sum(销量)*1.0/b.s <0.05 then 'A'
when sum(销量)*1.0/b.s between 0.05 and 0.2 then 'B'
ELSE 'C'
END as ABC
from ta,
(SELECT sum(销量) as s
FROM ta) b
group by 商品编码,b.s
--Result:
/*
商品编码 销量 ABC
---- ----------- ----
001 6 B
002 29 C
003 10 B
005 13 C
*/
--End