第一周:datediff(week,'2004-9-1',datecolumn)=0

解决方案 »

  1.   

    select 姓名,
      datepart(week,日期)-datepart(week,dateadd(day,-day(日期)+1,日期))+1 第几周
    ...
    from t
    group by 姓名,datepart(week,日期)-datepart(week,dateadd(day,-day(日期)+1,日期))+1
      

  2.   


    select 姓名
    ,第几周='第'+cast(第几周 as varchar)+'周'
    ,日期范围=replace(convert(varchar(5)
    ,case 
    when dateadd(week,第几周,'2004-8-23')<'2004-9-1'
    then '2004-9-1'
    else dateadd(week,第几周,'2004-8-23') end
    ,1),'/','月')+'号'
    +'-'+replace(convert(varchar(5)
    ,case 
    when dateadd(week,第几周,'2004-8-29')>'2004-9-30'
    then '2004-9-30'
    else dateadd(week,第几周,'2004-8-29') end
    ,1),'/','月')+'号'
    +replace(convert(varchar(5),dateadd(week,1,'2004-9-5'),1),'/','月')+'号'
    ,数据一,数据二
    from(
    select 姓名
    ,第几周=datediff(week,'2004-8-31',日期-1)+1
    ,数据一=sum(数据一)
    ,数据二=sum(数据二)
    from 表
    where 日期 between '2004-9-1' and '2004-9-30' --统计的日期范围
    group by 姓名,datediff(week,'2004-8-31',日期-1)
    )a
      

  3.   

    注意周数,楼主要求的周是周一到周日,sql的函数是按周日到周一
      

  4.   

    zjcxc,你好!我说的日期某个月是变的,不是说就是9月。就是某个月的每周的统计情况!
      

  5.   

    --示例存储过程
    create proc p_qry
    @年月 char(6)='200408' ----要查询的月份,假设查询:2004年8月
    as
    set nocount on
    --查询参数处理
    declare @dt1 datetime,@dt2 datetime
    declare @dta datetime,@dtb datetime
    select @dt1=@年月+'01',@dt2=dateadd(month,1,@dt1)
    ,@dtb=dateadd(day
    ,case 
    when (@@datefirst+datepart(weekday,@dt1)-1)%7=0
    then -7
    else -(@@datefirst+datepart(weekday,@dt1)-1)%7 end
    ,@dt1)
    ,@dta=dateadd(day,-6,@dtb)--查询出结果
    select 姓名
    ,第几周='第'+cast(第几周 as varchar)+'周'
    ,日期范围=replace(convert(varchar(5)
    ,case 
    when dateadd(week,第几周,@dta)<=@dt1
    then @dt1
    else dateadd(week,第几周,@dta) end
    ,1),'/','月')+'号'
    +'-'+replace(convert(varchar(5)
    ,case 
    when dateadd(week,第几周,@dtb)<@dt2
    then dateadd(week,第几周,@dtb)
    else @dt2-1 end
    ,1),'/','月')+'号'
    ,数据一,数据二
    from(
    select 姓名
    ,第几周=datediff(week,@dt1-1,日期-1)+1
    ,数据一=sum(数据一)
    ,数据二=sum(数据二)
    from 表
    where 日期>=@dt1 and 日期<@dt2
    group by 姓名,datediff(week,@dt1-1,日期-1)
    )a