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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 701|回复: 4
打印 上一主题 下一主题

[分享] SQLServer 标量值函数定义 和 使用实例

[复制链接]

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
跳转到指定楼层
楼主
发表于 2020-6-3 16:23:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
 楼主| 发表于 2020-6-3 16:24:12 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
 楼主| 发表于 2020-6-3 16:24:34 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
地板
发表于 2020-6-3 20:15:20 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
5#
发表于 2020-6-4 14:07:01 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-9-29 04:19 , Processed in 0.119308 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表