本帖最后由 iamggggs 于 2012-04-14 16:08:53 编辑

解决方案 »

  1.   


    select
     销售小组,
     sum(产品1金额) as 产品1销售金额,
     sum(产品2金额) as 产品2销售金额,
     sum(合同1) as 合同1签约数,
     (sum(产品1金额)+sum(产品2金额))/10000+sum(合同1数) as 得分
    from report 
    where 合同1=‘有效’
    group by 销售小组
    having 
      

  2.   


    这样不对吧?如果合同1<>'有效'的记录就不参与统计了,销售人员有可能只销售了产品而没有签订合同1.
      

  3.   

    假设这是report的内容:
    积分=两个产品的金额+合同签约数(合同=有效才算),通过语句得到下面的结果:
    这样说明白没有?
      

  4.   


    select 组别,sum(isnull(产品1金额,0)) as 产品1金额,
    sum(isnull(产品2金额,0)) as 产品2金额,
    sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
    sum(产品1金额+产品2金额)得分 from report
    group by 组别
      

  5.   


    select 组别,sum(isnull(产品1金额,0)) as 产品1金额,
    sum(isnull(产品2金额,0)) as 产品2金额,
    sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
    sum(产品1金额+产品2金额+(case when 合同1='有效' then 1 else 0 end))得分 from report
    group by 组别
      

  6.   


    有门!!得分中还少个“合同有效”的计算,改成:
    ....sum(产品1金额+产品2金额+合同1数量) as 得分....
    报数据类型错,如果改?
      

  7.   

    实测得分计算没对,即使不加如合同有效的计算,只计算产品金额也不对,除非把语句写成
    sum(isnull(产品1金额,0))+sum(isnull(产品2金额,0))+(case when 合同1='有效' then 1 else 0 end) as 等分
    还能再精简么?因为实际应用还用加入不同产品的销售日期的计算,不过你这个已经很有门了。
      

  8.   

    这个还能怎么精简?判断时间在where后加条件
      

  9.   


    不是,因为表中有三个日期,不能直接在最后的where处加时间判断,如果加到最后,对三个日期字段不管用or 还是 and 都不对,因为不可能每个记录都有这三个之间,如我贴图中的记录,只有张三有产品1的日期估计应该在每个单独的sum中加条件判断日期,但我不知道如何加,请指点,分是加定了。
      

  10.   

    哦,想复杂了,where后面跟三个日期的 or 条件即可,谢谢了。
      

  11.   

    go
    if OBJECT_ID('report')is not null
    drop table report
    go
    create table report(
    销售人员 varchar(10),
    销售小组 varchar(8),
    产品1销售金额 money,
    产品1销售日期 date,
    产品2销售金额 money,
    产品2销售日期 date,
    合同1 varchar(4),
    合同1签约日期 date
    )
    go
    insert report
    select '张三','第一组',10,'2012-04-01',5,'2012-04-02',null,null union all
    select '李四','第二组',null,null,null,null,'有效','2012-04-03' union all
    select '王五','第三组',null,null,5,'2012-04-10','无效','2012-04-2'select * from reportselect 销售小组,sum(isnull(产品1销售金额,0)) as 产品1金额,
    sum(isnull(产品2销售金额,0)) as 产品2金额,
    sum(case when 合同1='有效' then 1 else 0 end) as 合同1数量,
    sum(isnull(产品1销售金额,0)+isnull(产品2销售金额,0)+
    (case when 合同1='有效' then 1 else 0 end))得分 from report
    where 产品1销售日期='2012-04-01' 
    or 产品2销售日期='2012-04-01' 
    or 合同1签约日期='2012-04-01' 
    group by 销售小组/*
    销售小组 产品1金额 产品2金额 合同1数量 得分
    第一组 10.00 5.00 0 15.00
    */--是这个意思吗?