度量快速开发平台-专业、快速的软件定制快开平台

标题: SQLServer 标量值函数定义 和 使用实例 [打印本页]

作者: 张兴康    时间: 2020-6-3 16:23
标题: SQLServer 标量值函数定义 和 使用实例
  1. --自定义函数
  2. --名次查询
  3. USE [yuejuan105]
  4. GO
  5. SET ANSI_NULLS ON
  6. GO
  7. SET QUOTED_IDENTIFIER ON
  8. GO

  9. --获取考试成绩名次。
  10. CREATE FUNCTION [dbo].[GetRankNum] (
  11.     @ExamID  varchar(30) ,              --考试批次
  12.     @GradeID  varchar(30),              --年级ID
  13.     @ClassID  varchar(30),              --班级ID
  14.     @SubjectID  varchar(30),        --科目ID
  15.     @TestScores  varchar(30),       --考试分数  
  16.     @Type  int                  --查询类型(1:科目班级名次、2:科目年级名次、3:总分班级名次、4:总分年级名次)
  17.     )           
  18. RETURNS integer  AS
  19. begin
  20. declare
  21. @intVac int --返回名次      

  22. --科目班级名次
  23.     if(@Type=1)
  24.     begin
  25.         Select @intVac = Count(1) FROM T_CJ Where 1=1
  26.         AND BJ=@ClassID
  27.         AND NJ=@GradeID
  28.         AND KSID = @ExamID
  29.         AND KM = @SubjectID
  30.         AND ZF > @TestScores
  31.     end
  32.     --科目年级名次
  33.     else if(@Type=2)
  34.     begin
  35.         Select @intVac = Count(1) FROM T_CJ Where 1=1
  36.         AND NJ=@GradeID
  37.         AND KSID = @ExamID
  38.         AND KM = @SubjectID
  39.         AND ZF > @TestScores
  40.     end
  41.     --总分班级名次
  42.     else if(@Type=3)
  43.     begin
  44.         Select @intVac = Count(1) FROM T_CJ Where 1=1
  45.         AND BJ=@ClassID
  46.         AND NJ=@GradeID
  47.         AND KSID = @ExamID
  48.         AND ZF > @TestScores
  49.     end
  50.     --总分年级名次
  51.     else if(@Type=4)
  52.     begin
  53.         Select @intVac = Count(1) FROM T_CJ Where 1=1
  54.         AND NJ=@GradeID
  55.         AND KSID = @ExamID
  56.         AND ZF > @TestScores
  57.     end
  58.     else
  59.         begin
  60.         Select @intVac =-1
  61.     end
  62.         --返回名次
  63.         return @intVac+1            
  64.     end

  65. GO

  66. --调用标量值函数-班年科目查询
  67. Select
  68. A.CJID ,
  69. A.XH,
  70. A.XSXM,
  71. A.NJ,
  72. A.BJ,
  73. A.KM,
  74. ZF,
  75. B.ClassAVG,
  76. C.GradeAVG,
  77. dbo.GetRankNum(A.KSID,A.NJ,A.BJ,A.KM,A.ZF,1) AS ClassNum,
  78. dbo.GetRankNum(A.KSID,A.NJ,A.BJ,A.KM,A.ZF,2) AS GradeNum
  79. FROM dbo.T_CJ AS A
  80.         Left join
  81.         (
  82.         Select
  83.         KM,KSID,BJ,NJ,avg(ZF) as ClassAVG FROM T_CJ
  84.         Group by KM,KSID,BJ,NJ
  85.         ) AS B ON
  86.          A.km=b.km
  87.         and a.nj=b.nj
  88.         and a.bj=b.bj
  89.         and a.ksid=b.ksid
  90.         Left Join
  91.         (
  92.         Select
  93.         KM,KSID,NJ,avg(ZF) as GradeAVG FROM T_CJ
  94.         Group by KM,KSID,NJ
  95.         ) AS C ON
  96.          A.km=C.km
  97.         and a.nj=C.nj
  98.         and a.ksid=C.ksid
  99.          
  100. Where 1=1
复制代码


作者: 张兴康    时间: 2020-6-3 16:24

作者: 张兴康    时间: 2020-6-3 16:24

作者: caixuqad    时间: 2020-6-3 20:15

作者: fteair    时间: 2020-6-4 14:07





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2