我的表内容如下:
ID RQ NR
1 2007-02 aa
2 2007-02 数b
3 2007-03 数c
4 2007-03 数d学
5 2007-04 数d学
6 2007-04 数f学
7 2007-05 数f学
8 2007-05 数s学
9 2007-05 数森s学
想实现根据选择的日期动态生成如下结果,如:选择的RQ1是2007-02,RQ2是2007-04,就自动生产
2007-02 2007-03 2007-04
2 2 2(记录数)
如选择的是2007-03和2007-05就生成如下结果:
2007-03 2007-04 2007-05
2 2 3
ID RQ NR
1 2007-02 aa
2 2007-02 数b
3 2007-03 数c
4 2007-03 数d学
5 2007-04 数d学
6 2007-04 数f学
7 2007-05 数f学
8 2007-05 数s学
9 2007-05 数森s学
想实现根据选择的日期动态生成如下结果,如:选择的RQ1是2007-02,RQ2是2007-04,就自动生产
2007-02 2007-03 2007-04
2 2 2(记录数)
如选择的是2007-03和2007-05就生成如下结果:
2007-03 2007-04 2007-05
2 2 3
insert tb select '1000', '甲' ,'3月1日'
insert tb select '1001', '甲', '3月1日'
insert tb select '1002', '甲', '3月3日'
insert tb select '1003', '乙', '3月2日'
insert tb select '1004', '丁', '3月2日'
insert tb select '1005', '甲', '3月4日'
insert tb select '1006', '乙', '3月1日'
insert tb select '1007', '乙', '3月2日'
insert tb select '1008', '甲', '3月1日'
insert tb select '1009', '丁', '3月1日'
insert tb select '1010', '甲', '3月3日'declare @sql nvarchar(4000)
declare @dt_begin varchar(10),@dt_end varchar(10)--在这设置起始和结束日期
set @dt_begin='3-1'
set @dt_end='3-4'set @sql='select name'
select @sql=@sql+',sum(case when dt='''+dt+''' then 1 else 0 end) ['+dt+']'
from
(
select distinct *
from (select dt,'1900-'+replace(replace(dt,'月','-'),'日','') dat
from tb) tt
where dat between '1900-'+@dt_begin and '1900-'+@dt_end
) tset @sql=@sql+' from (select *,''1900-''+replace(replace(dt,''月'',''-''),''日'','''') dat
from tb) ta where dat between ''1900-'+@dt_begin+''' and ''1900-'+@dt_end+''' group by name order by name'exec (@sql)drop table tb/*
name 3月1日 3月2日 3月3日 3月4日
---------- ----------- ----------- ----------- -----------
丁 1 1 0 0
甲 3 0 2 1
乙 1 2 0 0(3 行受影响)
*/
--设表名为tb
declare @lstr varchar(8000),@rq1 char(7),@rq2 char(7)
--假设@rq1<=@rq2
set @lstr='select (select count(*) from tb where rq='''+@rq1+''' ['+@rq1+']'
while @rq1<@rq2
begin
set @rq1=convert(char(7),dateadd(mm,1,convert(datetime,@rq1+'-1',120)),120)
set @lstr=@lstr+',(select count(*) from tb where rq='''+@rq1+''' ['+@rq1+']'
end
exec (@lstr)