有如下表TB
COL1   SP     YEAR   MONTH   SL    JE
地点A  电脑   2010    1     100   500
地点A  电脑   2010    1     110   530
地点A  手机   2010    1     102   710
地点A  手机   2010    1     101   801
地点A  手机   2010    2     52    802
地点A  手机   2010    2     53    803
地点A  电脑   2010    2     55    804
地点A  电脑   2010    2     54    814
地点B  电脑   2010    1     100   500
地点B  电脑   2010    1     110   530
地点B  手机   2010    1     102   710
地点B  手机   2010    1     101   801
地点B  手机   2010    2     52    802
地点B  手机   2010    2     53    803
地点B  电脑   2010    2     55    804
地点B  电脑   2010    2     54    814我想分类算出每个月的平均价格,格式如下COL1   SP     YEAR   MONTH   SL    JE   AVG (当月该地点所有SP的总金额/总数量)
地点A  电脑   2010    1     220   1030   6
地点A  手机   2010    1     203   1511   6
地点A  手机   2010    2     105   1605   15
地点A  电脑   2010    2     109   1618   15
地点B  电脑   2010    1     220   1030   6
地点B  手机   2010    1     203   1511   6
地点B  手机   2010    2     105   1605   15
地点B  电脑   2010    2     109   1618   15

解决方案 »

  1.   


    select COL1,SP,[YEAR],[MONTH], SL=sum(sl), JE=sum(je), [AVG]=sum(sl)*1.0/sum(je) 
    from 表名
    group by COL1,SP,[YEAR],[MONTH]
      

  2.   

    select COL1,SP,[YEAR],[MONTH], SL=sum(sl), JE=sum(je), [AVG]=sum(sl)*1.0/sum(je) 
    from 表名 where MONTH = 1 --忘记数字是否需要加单引号了你试验一下~1就代表1月,2就代表2月依此类推
    group by COL1,SP,[YEAR],[MONTH]
      

  3.   

    错了,不是这样,[AVG]的聚合条件只有月份,没有SP
      

  4.   

    select COL1,SP,[YEAR],[MONTH], SL=sum(sl), JE=sum(je), [AVG]=sum(sl)*1.0/sum(je) 
    from 表名 where MONTH = 1 --忘记数字是否需要加单引号了你试验一下~1就代表1月,2就代表2月依此类推
      

  5.   

    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([COL1] [nvarchar](10),[SP] [nvarchar](10),[YEAR] [int],[MONTH] [int],[SL] [int],[JE] [int])
    INSERT INTO [tb]
    SELECT '地点A','电脑','2010','1','100','500' UNION ALL
    SELECT '地点A','电脑','2010','1','110','530' UNION ALL
    SELECT '地点A','手机','2010','1','102','710' UNION ALL
    SELECT '地点A','手机','2010','1','101','801' UNION ALL
    SELECT '地点A','手机','2010','2','52','802' UNION ALL
    SELECT '地点A','手机','2010','2','53','803' UNION ALL
    SELECT '地点A','电脑','2010','2','55','804' UNION ALL
    SELECT '地点A','电脑','2010','2','54','814' UNION ALL
    SELECT '地点B','电脑','2010','1','100','500' UNION ALL
    SELECT '地点B','电脑','2010','1','110','530' UNION ALL
    SELECT '地点B','手机','2010','1','102','710' UNION ALL
    SELECT '地点B','手机','2010','1','101','801' UNION ALL
    SELECT '地点B','手机','2010','2','52','802' UNION ALL
    SELECT '地点B','手机','2010','2','53','803' UNION ALL
    SELECT '地点B','电脑','2010','2','55','804' UNION ALL
    SELECT '地点B','电脑','2010','2','54','814'SELECT * FROM [tb]-->SQL查询如下:
    select COL1,SP,[YEAR],[MONTH],SUM(SL) SL,SUM(JE) JE,
    (select SUM(JE) FROM tb WHERE col1=t.col1 AND [YEAR]=t.[YEAR] AND [MONTH]=t.[MONTH])
    /(select SUM(SL) FROM tb WHERE col1=t.col1 AND [YEAR]=t.[YEAR] AND [MONTH]=t.[MONTH]) [AVG]
    FROM tb t
    GROUP BY COL1,SP,[YEAR],[MONTH]
    /*
    COL1       SP         YEAR        MONTH       SL          JE          AVG
    ---------- ---------- ----------- ----------- ----------- ----------- -----------
    地点A        电脑         2010        1           210         1030        6
    地点A        手机         2010        1           203         1511        6
    地点A        电脑         2010        2           109         1618        15
    地点A        手机         2010        2           105         1605        15
    地点B        电脑         2010        1           210         1030        6
    地点B        手机         2010        1           203         1511        6
    地点B        电脑         2010        2           109         1618        15
    地点B        手机         2010        2           105         1605        15(8 行受影响)
    */