要求;按编码分组查询 商品销售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
     ........................
    .
    .
    .
    ... 

解决方案 »

  1.   

    你的结果应该是怎样?ABC是1个列还是3个列
      

  2.   

    ABC分析报表:快速商品结构分析
     
      ABC分类法又称巴雷托分析法,它是根据在技术或经济方面的主要特征,进行分类排队,分清重点和一般,从而有区别地确定管理方式的一种分析方法。由于它把被分析的对象分成A 、B、 C 三类,所以又称为ABC分析法。把ABC分类方法应用到销售商品比重统计中,把销售额百分比累计到70%~80%的品种归为A类,A类下面占总额15%~20%的品种归为B类,余下的品种归为C类。这样能方便统计出占80%销售额比重的A类别商品和只占5%销售比重的C类别商品。这样就能使企业根据ABC分析的结果,对ABC三类商品采取不同的管理策略。同样道理,此种分析方法也可以应用到销售利润的分析之中。 
     
     
      

  3.   

    结果应该是 
          商品编码    销量      ABC 
        ..................... A
        .                     A
        .                     B
        .                     B
        .                     B
        .                     B
        .                     B
        .                     C
        .                     C
        .                     C
        .                     C
        .                     C
        .                     C
        .
        . 
        ...
      

  4.   


    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 商品编码
      

  5.   

    declare @total float
    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 商品编码
      

  6.   

    declare @total float
    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 商品编码
      

  7.   


    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
      

  8.   

    ------------------------------------
    -- 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 
      

  9.   

    你把不同的SQL看看执行计划及性能就知道了