请问如何在一个查询中计算每个月里的日均销售额?
数据表结构:
日期    |销售额|
2007-6-1|2022  | 
2007-6-2|20267 |
2007-6-3|45455 |
...............
2007-7-1|20267 |
2007-7-2|20267 |
...............
...............日均销售额=一个月的销售总额/该月的天数(28、29、30、31),我现在不知道如何得到每个月的天数,应该如何写sql语句?

解决方案 »

  1.   

    1. 如果是每天只有一条记录,那么可以把检索出来的记录条数作为所查询月的天数。
    2. 可以用MONTH(data)来获取检索日期中的月份,再根据月份来返回天数。
      

  2.   

    select datepart(day, cast(left(convert(varchar(10), dateadd(month, 1, 日期值), 120), 8) + '01' as datetime) - 1)這樣就可以得到所給日期值當月的天數了
      

  3.   

    create table test(日期 datetime,销售额 int)
    insert test select '2007-6-1',2022
    union all select '2007-6-2',20267
    union all select '2007-6-3',45455
    union all select '2007-2-1',2022
    union all select '2007-2-2',20267
    union all select '2007-2-3',20267select 日期,天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')),
    日销售额=总销售额/datediff(day,日期+'-01',dateadd(month,1,日期+'-01')) from
    (
    select 日期=convert(char(7),日期,120),总销售额=sum(销售额)
    from test
    group by convert(char(7),日期,120)
    )adrop table test日期      天数          日销售额        
    ------- ----------- ----------- 
    2007-02 28          1519
    2007-06 30          2258
      

  4.   

    如果每天都有数据,可以不用求每月天数select convert(varchar(7),日期,120) as 年月,avg(销售额) as 日均销售额
    from tablename
    group by convert(varchar(7),日期,120)
      

  5.   

    to:bill024(咖啡熊)
    对于现在时间2007-7-13,
    查看7月份的日均销售额,如果按的算法是:
    日均销售额=该月总销售额/31天,
    但是明显7 月份的记录还没有提交完毕,除以31那就不准确了!
      

  6.   

    你题目的要求是除以当月总天数的啊这样?
    create table test(日期 datetime,销售额 int)
    insert test select '2007-6-1',2022
    union all select '2007-6-2',20267
    union all select '2007-6-3',45455
    union all select '2007-2-1',2022
    union all select '2007-2-2',20267
    union all select '2007-2-3',20267
    union all select '2007-2-8',20267select 日期,当月天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')),已过天数,
    日销售额=总销售额/已过天数 from
    (
    select 日期=convert(char(7),日期,120),已过天数=count(*),总销售额=sum(销售额)
    from test
    group by convert(char(7),日期,120)
    )adrop table test日期      当月天数        已过天数        日销售额        
    ------- ----------- ----------- ----------- 
    2007-02 28          4           15705
    2007-06 30          3           22581
      

  7.   

    avg可以不管当月是全月的还是半月的
      

  8.   

    select convert(varchar(7),日期,120) as 年月,avg(销售额) as 日均销售额
    from t
    group by convert(varchar(7),日期,120)
      

  9.   

    看了一下楼主的需求,有两个关键点:
    1.是不是每天都有交易数据?是不是每天只有一条交易数据?如果是的话直接用avg就搞定了,如果不是那么就不能直接用avg了。
    2.当前月(还没有过完的月份)要怎么处理?除以总天数还是Month To Date?楼主搞清除这两个问题以后用上面兄弟的一些方法就能搞定啦。