加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql server 游标实例:循环表内数据,并根据参数 查询其他表内数

发布时间:2020-12-12 08:01:50 所属栏目:MsSql教程 来源:网络整理
导读:感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧。 SQL代码如下: declare @CityStr nvarchar(400)declare @Type nvarchar(10)declare @sDate datetime --开始时间declare @eDate datetime --结束时间declare @CityID nvarchar(10)declare @Stat
感兴趣的小伙伴,下面一起跟随编程之家 52php.cn的小编来看看吧。
SQL代码如下:

declare @CityStr nvarchar(400)
declare @Type nvarchar(10)
declare @sDate datetime --开始时间
declare @eDate datetime    --结束时间
declare @CityID nvarchar(10)
declare @StationID nvarchar(10)
declare @channel_num nvarchar(10)
set @CityStr='06'
set @Type='O3'
set @sDate='2008-03-01'
set @eDate='2013-01-20'
declare C_SlideAvg cursor for select a.id as CityID,b.id as StationId,c.channel_num from TAB_BASE_GROUP as a,TAB_STATION_BASEINFO as b,tab_channel_baseinfo as c where a.id=b.group_id and a.id in(@CityStr) and b.id=c.station_id  and upper(c.channel_name)=upper(@Type) 
and c.channel_state = 1
open C_SlideAvg --打开游标
fetch next from C_SlideAvg into @CityID,@StationID,@channel_num
while(@@fetch_status=0)
begin
------------------------------------------------------------------------------------------------------------------------------

declare @days int --间隔的天数
declare @i int
set @i=0
set @days=datediff(day,@sDate,@eDate)
declare @mDate datetime
--开始循环日期相加
while @i<@days
begin
    set @i=@i+1
    set @mDate=DATEADD(day,@i,@sDate) --循环的每一天的变量
    declare @h int
    set @h=0
    while @h<24--循环24小时
    begin
        declare @h24 datetime
        set @h=@h+1 --时间每次循环+1
        set @h24=DATEADD(Hour,@h,@mDate)
        declare @oldH datetime
        set @oldH=DATEADD(Hour,-7,@h24) --当前小时数 减去8小时
        declare @sql1 nvarchar(1000)
        --set @sql1='select avg(val) as SlideAvg from S'+@StationID+'HN where channel_num='''+@channel_num+''' and date_time>='+convert(varchar,@oldH,120)+' and date_time<='''+convert(varchar,@h24,120)+''''
        declare @slideAvg real
        set @sql1='select @slideAvg=avg(val) from S'+@StationID+'HN where channel_num='''+@channel_num+''' and date_time>='''+convert(nvarchar,120)+''' and date_time<='''+convert(nvarchar,120)+''''
        --print @sql1
        exec sp_executesql @sql1,N'@slideAvg real output',@slideAvg output
        IF @slideAvg IS NOT NULL AND @slideAvg<>''
        begin
            declare @sql2 nvarchar(1000)
            set @sql2='insert into Tab_Slideavg values(''06'','''+@StationID+''','''+@channel_num+''','''+convert(varchar,120)+''',@slideAvg,120)+''')'
            exec sp_executesql @sql2
        end
    end
end

-------------------------------------------------------------------------------------------------------------------------------
fetch next from C_SlideAvg into @CityID,@channel_num --取下一条记录
end
close C_SlideAvg--关闭游标
deallocate C_SlideAvg


---- 来自52php.cn 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读