表A- 2006保存本年度话费情况,
帐户 开户日期  1月话费 2月话费...  8月话费   ....  12月话费  本年平均话费 
1001  20050105   42      40    ...  50        ...   0         45
1002  20060205   0.0     60    ...  70        ...   0         75
.....
1100  20060505   0.0      0    ...  70        ...   0         75如何每月修改"本年平均话费"
注意: 8月话费,8月更新,更新后修改该帐户的"本年平均话费"
如果开户日期是200505 ,那么他的"本年平均话费"= avg(1月话费+ ...+6月话费+ 7月话费 +8月话费)
如果开户日期是200605 ,那么他的"本年平均话费"= avg( 5月话费 +6月话费 + 7月话费 +8月话费)
如果开户日期是200606 ,那么他的"本年平均话费"= avg( 6月话费 + 7月话费 +8月话费)我想写一个存储过程,每月动态修改"本年平均话费",如何写?

解决方案 »

  1.   

    如果开户日期是200505 ,那么他的"本年平均话费"= avg(1月话费+ ...+6月话费+ 7月话费 +8月话费)
    如果开户日期是200605 ,那么他的"本年平均话费"= avg( 5月话费 +6月话费 + 7月话费 +8月话费)
    如果开户日期是200606 ,那么他的"本年平均话费"= avg( 6月话费 + 7月话费 +8月话费)
    ========
    没有看懂..你的开户日期和统计月分是什么关系..
      

  2.   

    select
        (1月话费+2月话费+...+12月话费)/
          (case 
             when datediff(year,开户日期,getdate())>0
               then month(getdate())
             else (datediff(month,开户日期,getdate()))+1
           end)
    from
        表A
      

  3.   

    select 帐户,开户日期,avg(ISNULL(MonthFee,0)) FROM
    (select 帐户,开户日期,一月话费 MonthFee,TheMonth=1 from tb
    union all
    select 帐户,开户日期,二月话费,2 from tb
    union all
    select 帐户,开户日期,三月话费,3 from tb
    union all
    select 帐户,开户日期,四月话费,4 from tb
    union all
    select 帐户,开户日期,五月话费,5 from tb
    union all
    select 帐户,开户日期,六月话费,6 from tb
    union all
    select 帐户,开户日期,七月话费,7 from tb
    union all
    select 帐户,开户日期,八月话费,8 from tb
    union all
    select 帐户,开户日期,九月话费,9 from tb
    union all
    select 帐户,开户日期,十月话费,10 from tb
    union all
    select 帐户,开户日期,十一月话费,11 from tb
    union all
    select 帐户,开户日期,十二月话费,12 from tb
    ) x
    WHERE TheMonth BETWEEN Month(开户日期) AND Month(GetDate())
    GROUP BY 帐户,开户日期
      

  4.   

    条件写错了。
    WHERE TheMonth BETWEEN (CASE WHEN YEAR(开户日期)<YEAR(Getdate()) THEN 1 ELSE Month(开户日期) END) AND Month(GetDate())