表log
表结构
字段名        描述 数据类型          备注
ID       主标识号 INT         主键
userId       员工ID INT
groupId       业务组ID   INT
phoneNumber   销售号码 Varchar(20) 唯一约束
catalogId     产品类别ID INT
stallId       产品档位ID INT
sale_time     销售时间 DATETIME 时间格式为:2008-6-17 11:12:13
feeType       付费类型 INT         0 预付费 1 后付费说明:这是一个销售记录表, 记录已经销售出去的手机号码。
其中销售的手机号码属于某一个产品档位,而多个产品档位属于某个产品类别。
userId是某个销售人员的ID,他属于一个业务组。求高手给出SQL语句:
序号 销售人员ID  销售月份  产品类别1销售数量  产品类别2销售数量   产品类别3销售数量  月总销售数量
要求统计出某个销售月份里某销售人员的销售数量,其中还要列出不同的产品类别数量
例如:序号 销售人员ID  销售月份  产品类别1销售数量  产品类别2销售数量   产品类别3销售数量  月总销售数量
1   张三         2008-06  200              300              400              900
2   李四         2008-06  311              211              111              633
3   王五         2008-06  0                11               300              311

解决方案 »

  1.   

    select userId 销售人员ID, to_char(sale_time,'yyyy-mm') 销售月份 
           sum(decode(catalogId,1,1,0)) 产品类别1销售数量,
           sum(decode(catalogId,2,1,0)) 产品类别2销售数量,
            sum(decode(catalogId,3,1,0)) 产品类别3销售数量,
           count(*) 月总销售数量 
         from log
    group by userID, to_char(sale_time,'yyyy-mm')
    以上是固定列,catalogId不知道你具体值是什么,随便写了1,2,3,你根据你的值来改
      

  2.   

    hebo2005  已经解决了你的sql问题,
    建议你自己写成通用模块。
      

  3.   

    不固定行列,参照这个贴熊猫写的
    http://topic.csdn.net/u/20080416/11/910e40c1-60f1-441f-8b0f-19a969d30f77.html
      

  4.   


    SELECT ROWNUM, USERID, DD, SUM(S1), SUM(S2), SUM(S3), SUM(S1 + S2 + S3)
      FROM (SELECT USERID,
                   TO_CHAR(SALE_TIME, 'yyyy-mm') DD,
                   DECODE(CATALOGID, 1, 1, 0) S1,
                   DECODE(CATALOGID, 2, 1, 0) S2,
                   DECODE(CATALOGID, 3, 1, 0) S3
              FROM LOG
             WHERE SALE_TIME BETWEEN TRUNC(SYSDATE, 'mm') AND
                   ADD_MONTHS(TRUNC(SYSDATE, 'mm'), 1) - 0.00001)
     GROUP BY USERID, DD;
      

  5.   

    固定列decode。不固定可以用存储过程实现。
    具体的上边几位都说的很清楚了。
      

  6.   


    不是固定的3个类别这里的面的类别是按照销售记录里出现的类别来统计的
    我上面给的例子里王五,他销售的一些产品,某些类别没有,数量就为0可能一个SQL很难解决上面那个统计,我正考虑用储存过程去解决
      

  7.   

    http://cosio.itpub.net/post/10244/467060
      

  8.   

    其实目前这个统计的SQL,难的地方就在如何把不是固定列的类别的数量按照不同销售人员和时间给统计出来
      

  9.   


    这位大哥,你写的SQL,能不能把DECODE()函数用别的办法给替换了,
    我项目中用的是hibernate, 貌似hibernate不支持DECODE()函数, 太郁闷了
      

  10.   

    那就用case when
    select userId 销售人员ID, to_char(sale_time,'yyyy-mm') 销售月份 
           sum(case catalogId when 1 then 1 else 0 end)) 产品类别1销售数量,
           sum(case catalogId when 2 then 1 else 0 end)) 产品类别2销售数量,
           sum(case catalogId when 2 then 1 else 0 end)) 产品类别3销售数量,
           count(*) 月总销售数量 
         from log
    group by userID, to_char(sale_time,'yyyy-mm')
      

  11.   

    select userId 销售人员ID, to_char(sale_time,'yyyy-mm') 销售月份 
           sum(case catalogId when 1 then 1 else 0 end)) 产品类别1销售数量,
           sum(case catalogId when 2 then 1 else 0 end)) 产品类别2销售数量,
           sum(case catalogId when 2 then 1 else 0 end)) 产品类别3销售数量,
           count(*) 月总销售数量 
         from log
    group by userID, to_char(sale_time,'yyyy-mm')
      

  12.   

    谢谢hebo2005,按照你的思路已经把问题给解决了。结账