select r.Employeeid,(select count(*) from  Orders where Employeeid=r.Employeeid and orderdate>'1994-01-01'and orderdate<'2005-01-01' ) 总计,count(*) 小计 from   Orders r
 where orderdate>'1997-01-01'and orderdate<'2005-01-01' group by r.EmployeeidNorthwind库中测试通过。

解决方案 »

  1.   

    select a.公司号,sum(a.业务收入) from table1 a
    left join (select 公司号,sum(业务收入)*1.0/datediff(d,datepart(yy,输入日期)+'-01-01',输入日期) where  日期 between datepart(yy,输入日期)+'-01-01' and 输入日期
       from table1 group by 公司号) b
    on a.公司号=b.公司号
    where a.日期=输入日期 group by a.公司号
      

  2.   

    刚才少写了点
    select a.公司号,sum(a.业务收入),avgSR from table1 a
    left join (select 公司号,avgSR=sum(业务收入)*1.0/datediff(d,datepart(yy,输入日期)+'-01-01',输入日期) where  日期 between datepart(yy,输入日期)+'-01-01' and 输入日期
       from table1 group by 公司号) b
    on a.公司号=b.公司号
    where a.日期=输入日期 group by a.公司号
      

  3.   

    如果table2的数据量真得非常大,无论怎么写SQL,都不会有很好的效率。因为计算年日均收入时,都必须根据整个表的数据重新计算一次。
    建议在table2中增加一个字段,用以存放到每个公司每项业务到那天为止的累计收入(可以根据前一天的累计加上当天的数据计算出来)。这样计算起时,直接用这个数字除以天数即可。再根据日期和公司编号建索引,应该会提高不少效率。
    我估计你这张表,应该也是定期(可能是每天)根据其他明细表的数据合计出来的。如果是这样,加一个字段应该没有太大关系。 如果不是这种情况,就没招了。
      

  4.   

    TO efly75:
    难道不可以通过存储过程来做日均这个字段吗
      

  5.   

    ReViSion(和尚) 说的对,用不用存储过程,都是那几句SQL语句,没有大的差异。关键是如果增加累计字段,可以一次性计算好,以后再查询时,就不用再计算了。一般情况下,查询的次数肯定会多得多。