如何修改这个sql语句

通过以下语句可以实现查询返回每个月的记录数,且格式如下:

时间: 2011-1 2011-2 2011-3 2011-4.。。。。。
记录数: 100 67 88 105

现想修改sql语句为查询周期以周为单位(自动默认从周一至周天,时间段的选择是动态的),得出结果格式如下:
时间: 第一周 第二周 第三周 第四周。。。。。。
记录数: 20 40 30 10

declare @s varchar(8000)
select @s=isnull(@s,'')+'['+convert(varchar(7),txtime,120)+'],'
from qxzb
group by convert(varchar(7),txtime,120)
select @s='select * from'
  +' (select months=convert(varchar(7),txtime,120),Num=count(1) from qxzb group by convert

(varchar(7),txtime,120)) t'  
  +' pivot (max(Num) for months in ('+left(@s,len(@s)-1)
  +')) a '
exec(@s)

请问以上语句如何修改?

作者: tdzbh   发布时间: 2011-06-11

你把 convert(varchar(7),txtime,120) 换成 datename(week,txtime) 试试!

作者: AcHerat   发布时间: 2011-06-11

楼上的高手,请问如何使周的日期自动默认从周一至周天,时间段的选择是动态的,怎么实现在这个动态的时间段里把周的日期自动分开,如时间段为2011-01-01至2011-01-25,第一周的时间只有5天(1月1日是周三,最后一周也只有5天(1月25日是周六)

作者: tdzbh   发布时间: 2011-06-11

说错了:第一周的时间只有5天(1月1日是周三,最后一周只有6天(1月25日是周六)

作者: tdzbh   发布时间: 2011-06-11

你可以先做一个日期表,存每周的起始日期和结束日期

select convert(varchar(10),min(txtime),120) as stime,
  convert(varchar(10),max(txtime),120) as etime
  into #tb
from tb
group by datename(week,txtime)

用这个临时表的stime和etime去划分你的数据! 列可以为 2011-06-01 -- 2011-06-05 类似这个样子。

作者: AcHerat   发布时间: 2011-06-11