关于这个问题,在Csdn上问了一下,木有人给出想要的答案,跟同学鼓捣了一下,解决……
方法一:利用存储过程,这种方法还是比较有效和快速的,但是觉得在这个系统中,表啊 字段啊条件啊 都是拼接的,需要给存储过程传递参数太多了,太麻烦了,只好忍痛割爱,不用这种方法。但是 这种方法的执行速度还是蛮理想的。
创建的存储过程,这个SQl存储过程是个循环滴……
Create procedure [dbo].[testtable_2]
@tb_1 nvarchar(100), @tb_2 nvarchar(100),
@fld_tb1 nvarchar(100), @fld_tb2 nvarchar(100),
@fn_tb1 nvarchar(100), @fn_tb2 nvarchar(100),
@dt1 datetime,@dt2 datetime---------------------------------------------这些是需要从外界传进来的参数
as
begin
declare @newdt1 datetime ;
declare @i int,@dt datetime;
declare @datediff int;
declare @dt11 varchar(30);
declare @newdt11 varchar(30);
--set @dt='2011-2-13';
--计算时间间隔
set @datediff=datediff(day,@dt1,@dt2);------------------------datediff(day,date1,date2),函数 计算两个日期间的时间间隔:天数
set @i=-1;
--set @time='time';
while @i<@datediff -------------------------------循环
begin
set @newdt1=dateadd(dd,1,@dt1) ;-----------dateadd函数,天数加1
set @dt11= convert(varchar(30),@dt1 ,102);
set @newdt11= convert(varchar(30),@newdt1 ,102);
EXEC('
SELECT
convert(varchar(30),'''+ @dt11 +''',111) as [时间],
sum(['+ @fld_tb1 + '])/count(*) as [' + @fn_tb1 + '],
sum([' + @fld_tb2 + '])/count(*) as [' + @fn_tb2 + '] ----------------------------计算平均值
FROM
['+ @tb_1 + ']
INNER JOIN [' + @tb_2 + '] ON [' + @tb_1 + '].Time = [' + @tb_2 + '].Time
where [' + @tb_2 + '].Time between '''+ @dt11 +''' and ''' + @newdt11 + '''
'
)
set @dt1=@newdt1;
set @i=@i+1;
end
end
GO
这个存储结构是不断的进行循环查询的,每循环一次,