zoukankan      html  css  js  c++  java
  • 存储过程统计10年热点关键词

    记录一下吧

      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
  • 相关阅读:
    luoguP5162 WD与积木
    maven学习7 settings.xml解析
    mybatis 学习六 MyBatis主配置文件
    mybatis 学习五 动态SQL语句
    mybatis 学习四(下) SQL语句映射文件增删改查、参数、缓存
    mybatis 学习四 (上)resutlMap
    mybatis 学习三 关键文件解析
    spring 学习二 @RequestMapping
    Spring 学习一 @Autowired
    mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql
  • 原文地址:https://www.cnblogs.com/zhangpan1244/p/2893109.html
Copyright © 2011-2022 走看看