前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >存储过程-统计10年热点关键词

存储过程-统计10年热点关键词

作者头像
Isaac Zhang
发布2019-09-10 18:47:34
2440
发布2019-09-10 18:47:34
举报
文章被收录于专栏:奔跑的人生奔跑的人生

记录一下吧

代码语言:javascript
复制
  1 USE [NPU_Group]
  2 GO
  3 /****** Object:  StoredProcedure [dbo].[Proc_HotAndFutrueKeywords]    Script Date: 02/05/2013 10:02:26 ******/
  4 SET ANSI_NULLS ON
  5 GO
  6 SET QUOTED_IDENTIFIER ON
  7 GO
  8 -- ================================================
  9 -- Proc Function : 研究热点和趋势统计存储过程
 10 -- Create Date   : 2013-02-01
 11 -- Update Date   : 2012-02-01
 12 -- Create User   : IsaacZhang
 13 -- Update User   : IsaacZhang
 14 -- Description   : 研究热点和趋势统计数据
 15 -- Parameter     :
 16 -- ================================================
 17 ALTER PROCEDURE [dbo].[Proc_HotAndFutrueKeywords]
 18     @year INT ,--年度
 19     @groupIntId INT,  --群组ID
 20     @TopNum INT --取多少条热点数据
 21 AS
 22 
 23 
 24 --创建结果临时表
 25 CREATE TABLE #tbResult(
 26         KeywordIdInt INT , 
 27         KeywordId UNIQUEIDENTIFIER ,
 28         KeyWordName VARCHAR(200) ,
 29         ForeignName VARCHAR(200) ,
 30         IsTopic BIT ,
 31         HotYear INT,
 32         TotalCount decimal(18, 2),
 33         GroupIntId INT,
 34         AmplificationNum decimal(18, 2),
 35         Amplification decimal(18, 2),
 36         AmpliFactor    decimal(18, 2)
 37 )
 38 --定义要输出的所有年份
 39 DECLARE @YearCount INT
 40 SET @YearCount = 10;
 41 --声明变量
 42 DECLARE @KeywordIdInt INT
 43 DECLARE @KeywordId UNIQUEIDENTIFIER
 44 DECLARE @KeyWordName VARCHAR(200),@ForeignName VARCHAR(200)
 45 DECLARE @IsTopic BIT
 46 DECLARE @TotalCount decimal(18, 2)
 47 DECLARE @Amplification decimal(18, 2),@lastYearCount decimal(18, 2),@AmplificationNum decimal(18, 2)
 48 ,@AmpliFactor    decimal(18, 2)
 49 
 50 DECLARE @CurrentYear INT
 51 --如果群组ID不为0,则取全部关键词文献信息
 52 IF @groupIntId!=0
 53 BEGIN
 54 
 55 BEGIN TRANSACTION Trans_HotAndFutrueKeywords --创建事务
 56 --删除表中原数据
 57 DELETE FROM dbo.Pt_FutureAmplification;
 58 
 59     --初始化当前年
 60     SET @CurrentYear = @year;
 61     WHILE(@CurrentYear>=@year-@YearCount)
 62     BEGIN
 63         --声明游标
 64         DECLARE hotKeywordsIndex CURSOR 
 65         FOR SELECT * FROM NPU_Core.dbo.Keyword
 66         OPEN hotKeywordsIndex
 67         FETCH NEXT FROM hotKeywordsIndex INTO @KeywordIdInt,@KeywordId,@KeyWordName
 68                 ,@ForeignName,@IsTopic
 69         WHILE @@FETCH_STATUS = 0
 70         BEGIN
 71             --每次重新赋值
 72             SET @TotalCount = 0;
 73             SET @lastYearCount = 0;
 74             PRINT '=============='+CAST(@CurrentYear AS VARCHAR(20))+'==============='
 75             SELECT @TotalCount = COUNT(0) FROM View_ShareBib2Keywords WHERE KeywordIdInt =@KeywordIdInt
 76             AND [Year] = @CurrentYear
 77             
 78             SELECT @lastYearCount = COUNT(0) FROM View_ShareBib2Keywords WHERE KeywordIdInt =@KeywordIdInt
 79             AND [Year] = (@CurrentYear-1)
 80             --PRINT CAST(@TotalCount AS VARCHAR(20))+'<-current-------last->'+CAST(@lastYearCount AS VARCHAR(20))
 81             --增长数量
 82             SET @AmplificationNum = @TotalCount-@lastYearCount;
 83             --增长幅度
 84             IF @lastYearCount!=0 AND @lastYearCount!=1
 85             BEGIN
 86                 SET @Amplification = (@TotalCount-@lastYearCount)/@lastYearCount
 87                 --增长因素
 88                 SET @AmpliFactor = @AmplificationNum*@Amplification;
 89                 --如果增幅为负增长
 90                 IF(@TotalCount<@lastYearCount)
 91                 BEGIN
 92                     SET @Amplification = -round((@lastYearCount-@TotalCount)/@lastYearCount,3);
 93                     SET @AmpliFactor = -@AmpliFactor;
 94                     --PRINT '|||'+CAST(@Amplification AS VARCHAR(20))
 95                 END
 96             END
 97             ELSE
 98             BEGIN
 99                 SET @Amplification = (@TotalCount-@lastYearCount)/1.00;
100                 SET @AmpliFactor = 0;
101             END
102             IF @TotalCount IS NULL
103                 SET @TotalCount = 0;
104         
105             INSERT INTO Pt_FutureAmplification VALUES(
106                 @KeywordIdInt,
107                 @KeywordId,
108                 @KeyWordName,
109                 @ForeignName,
110                 @IsTopic,
111                 @CurrentYear,
112                 @TotalCount,
113                 @groupIntId,
114                 @AmplificationNum,
115                 @Amplification,
116                 @AmpliFactor
117             );
118         --执行下一次游标操作
119         FETCH NEXT FROM  hotKeywordsIndex INTO @KeywordIdInt,@KeywordId,@KeyWordName
120             ,@ForeignName,@IsTopic
121         END
122         --关闭游标
123         CLOSE hotKeywordsIndex
124         --释放资源
125         DEALLOCATE hotKeywordsIndex
126         SET @CurrentYear = @CurrentYear-1;
127     END
128     
129         SELECT top ((@TopNum)) * FROM #tbResult
130         WHERE HotYear = ((@year-2))
131          ORDER BY TotalCount DESC,HotYear DESC
132     IF @@ERROR=0
133         COMMIT TRANSACTION Pt_FutureAmplification -- 提交事务处理
134     ELSE
135         ROLLBACK TRANSACTION Pt_FutureAmplification   --事务回滚
136 END
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-02-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档