`
qys2010
  • 浏览: 127284 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL Server 2005新增函数简介

阅读更多

            SQL server 2005新增的几个函数,分别是row_number( )、rank( )、,DENSE_RANK( )、ntile( )下面以实例分别简单讲解。

1.row_number( )
         先来点数据,先建个表
SET NOCOUNT ON
CREATE TABLE Person(
FirstName VARCHAR(10),
Age INT,
Gender CHAR(1))
INSERT INTO Person VALUES ('Ted',23,'M')
INSERT INTO Person VALUES ('John',40,'M')
INSERT INTO Person VALUES ('George',6,'M')
INSERT INTO Person VALUES ('Mary',11,'F')
INSERT INTO Person VALUES ('Sam',17,'M')
INSERT INTO Person VALUES ('Doris',6,'F')
INSERT INTO Person VALUES ('Frank',38,'M')
INSERT INTO Person VALUES ('Larry',5,'M')
INSERT INTO Person VALUES ('Sue',29,'F')
INSERT INTO Person VALUES ('Sherry',11,'F')
INSERT INTO Person VALUES ('Marty',23,'F')

直接用例子说明问题:
SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age],
FirstName,
Age
FROM Person

出现的数据如下
Row Number by Age                FirstName            Age
--------------------------                 ----------            --------
1                                                Larry                   5
2                                                Doris                   6
3                                                George               6
4                                                Mary                   11
5                                                Sherry                 11
6                                                Sam                    17
7                                                Ted                     23
8                                                Marty                   23
9                                                Sue                     29
10                                              Frank                  38
11                                              John                    40
可以观察到,是根据年龄升序排列了,并且row_number()是给出了序列号了,这个序列号被重命名为Row Number by Age,与sql server2000对比:如果在sql server2000中实现相对麻烦一些,我们可以利用IDENTITY()函数实现,但IDENTITY()函数只能用在sql server2000临时表中,因此需要将数据检索到临时表里。select identity(int,1,1) as [Row Number by Age],FirstName,Age into #A from Person order by Ageselect * from #Adrop table #a 如果不想按年龄排序,可以这样写SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set],
FirstName,
Age
FROM Person
另外一个例子SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person这里是按性别划分区间了,同一性别再按年龄来排序,输出结果如下

Partition by Gender        FirstName        Age               Gender
-------------------- ---------- ----------- ------
1                          Doris            6                 F
2                          Mary             11                F
3                          Sherry           11                F
4                          Sue              29                F
1                          Larry            5                 M
2                          George           6                 M
3                          Sam              17                M
4                          Ted              23                M
5                          Marty            23                M
6                          Frank            38                M
7                          John             40                M
注意,姓名M开始,序号又从1,2,3开始了

2.RANK( )函数        先看例子SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age],
FirstName,
Age
FROM Person输出如下:Rank by Age                FirstName        Age
-------------------- ---------- -----------
1                          Larry            5
2                          Doris            6
2                          George           6
4                          Mary             11
4                          Sherry           11
6                          Sam              17
7                          Ted              23
7                          Marty            23
9                          Sue              29
10                         Frank            38
11                         John             40
看到了么,同年岭的话,将有相同的顺序,顺序成1,2,2,4了。与sql server2000对比:出现了RANK()函数实在是方便,在sql server2000里实现排序并列的问题麻烦很多。select [Rank by Age]=isnull((select count(*) from person where Age>A.Age),0)+1,FirstName,Age from Person A order by [Rank by Age]SELECT RANK() OVER(PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],FirstName, Age, Gender FROM Person输出为Partition by Gender        FirstName        Age               Gender
-------------------- ---------- ----------- ------
1                          Doris            6                 F
2                          Mary             11                F
2                          Sherry           11                F
4                          Sue              29                F
1                          Larry            5                 M
2                          George           6                 M
3                          Sam              17                M
4                          Ted              23                M
4                          Marty            23                M
6                          Frank            38                M
7                          John             40                M
可以看到,按性别分组了,每个性别分组里,继续是用了rank( )函数

3.DENSE_RANK( )函数
         SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],
         FirstName,
         Age
         FROM Person

输出结果为:
Dense Rank by Age          FirstName        Age
-------------------- ---------- -----------
1                          Larry            5
2                          Doris            6
2                          George           6
3                          Mary             11
3                          Sherry           11
4                          Sam              17
5                          Ted              23
5                          Marty            23
6                          Sue              29
7                          Frank            38
8                          John             40

看到了么,和rank函数区别是,顺序始终是连续的,Doris 和George同年,都是排第2位,但之后的mary不象rank函数那样排第4,而是排第3位了


4.ntile( )函数
SELECT FirstName,
Age,
NTILE(3) OVER (ORDER BY Age) AS [Age Groups]
FROM Person

输出结果:
FirstName        Age               Age Groups
---------- ----------- --------------------
Larry                5                  1
Doris                6                  1
George            6                  1
Mary                11                1
Sherry             11                 2
Sam                17                 2
Ted                 23                 2
Marty              23                 2
Sue                29                 3
Frank             38                 3
John               40                 3
这个函数按照ntile(n)中的N,把记录强制分成多少段,11条记录现在分成3段了,lary到mary是第1段,sherry到maty是第2段,sue到john是第3段了。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/duanzhi1984/archive/2008/10/25/3134831.aspx
分享到:
评论

相关推荐

    40集SQL Server 基础入门视频教程 SQL Server 数据库基础入门必备课程

    11.SQL Server 2014新增表记录.mp4 12.SQL Server 2014查询表记录.mp4 13.SQL Server 2014修改表记录.mp4 14.SQL Server 2014删除表记录.mp4 15.SQL Server 2014条件限制where.mp4 16.SQL Server 2014 BETWEEN...

    Microsoft SQL Server 2005 Native Client

    2. **支持新特性**:它支持SQL Server 2005引入的新特性,如行版本控制、分区视图、用户定义的函数和存储过程等。 3. **安全性增强**:支持集成Windows身份验证,提供更安全的连接方式,同时支持SQL Server的角色...

    SQL SERVER2012中新增函数之字符串函数CONCAT详解

    在SQL Server 2012中,引入了一个新的字符串函数——CONCAT,它的主要功能是方便地连接多个字符串。在CONCAT函数出现之前,我们通常使用 "+" 运算符来连接字符串,但这种方法存在一个问题,即如果其中任何一个字符串...

    Microsoft SQL Server 2005 技术内幕:T-SQL程序设计(CHM格式)

    该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    SQL Server 2014基础入门视频教程 (40集,含课件)

    1.SQL Server 2014简介.mp4 2.SQL Server 2014硬件和软件要求.mp4 3.SQL Server 2014数据库安装.mp4 4.SQL Server 2014数据库创建.mp4 5.SQL Server 2014数据库修改与删除.mp4 6.SQL Server 2014数据库备份与...

    Microsoft SQL Server2005技术内幕:T-SQL查询(中文PDF版)part1

    该书解释并比较了sql server 2000和sql server 2005在数据库开发相关问题上的解决方案,深入讨论了sql server 2005中新增的t-sql编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    SQL SERVER 2005 新增的几个小功能

    ### SQL Server 2005新增的小功能详解 #### 一、分页查询数据 在SQL Server 2005之前,实现分页查询通常较为复杂且效率不高。随着SQL Server 2005的发布,引入了一种更为简便的方式来实现分页查询,即通过`ROW_...

    40集SQL Server 基础入门视频教程 SQL Server 数据库基础入门必备课程.txt

    11.SQL Server 2014新增表记录.mp4 12.SQL Server 2014查询表记录.mp4 13.SQL Server 2014修改表记录.mp4 14.SQL Server 2014删除表记录.mp4 15.SQL Server 2014条件限制where.mp4 16.SQL Server 2014 BETWEEN...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    该书解释并比较了SQL Server 2000和SQL Server 2005在数据库开发相关问题上的解决方案,深入讨论了SQL Server 2005中新增的T-SQL编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    sql server 2005创建的数据库文件到sql2000

    本文将详细阐述如何将SQL Server 2005创建的数据库文件迁移到较早版本的SQL Server 2000,并提供具体的操作步骤、注意事项以及可能遇到的问题解决方案。 #### 1. 理解兼容性问题 在开始迁移之前,重要的是理解SQL ...

    sql server 2005智能提示工具

    SQL Server 2005智能提示工具是一款专为数据库开发者设计的强大辅助软件,它极大地提升了在SQL Server 2005环境下编写SQL语句的效率和准确性。这款工具通过提供实时的代码补全、语法检查和错误提示等功能,使得...

    SQL Server 2005 T-SQL增强

    在SQL Server 2005中,新增了以下几种排名函数: - **ROW_NUMBER**: 为结果集中的每一行分配一个唯一的整数。 - **RANK**: 根据特定列的值对行进行排序并分配一个排名。 - **DENSE_RANK**: 类似于RANK函数,但在...

    Microsoft SQL Server2005技术内幕:T-SQL查询(中文PDF版)part4

    该书解释并比较了sql server 2000和sql server 2005在数据库开发相关问题上的解决方案,深入讨论了sql server 2005中新增的t-sql编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...

    SQL Server 2005 清华大学 课件 PPT

    SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和应用开发中扮演着重要角色。清华大学作为国内顶尖的高等学府,其课程资源备受关注,尤其是针对IT技术的专业课程。这个SQL ...

    sqlserver2000日期函数处理大全

    此外,随着SQL Server版本的更新,新的日期和时间函数也不断出现,例如在SQL Server 2005及以后的版本中,新增了关于日期和时间的更多高级功能。尽管如此,SQL Server 2000的日期函数仍然是理解和掌握SQL日期处理的...

    SQL Server 2005技术内幕英文版CHM文件2

    1. **Transact-SQL (T-SQL)增强**:SQL Server 2005对T-SQL进行了大量改进,包括新函数、新语句和优化的执行计划。例如,新增了窗口函数,使得在复杂的数据分析中更加便捷;新的XML数据类型允许直接存储和查询XML...

    Microsoft SQL Server 2005 Express Edition SP3

    如果在更早 Community Technology Preview (CTP) 版本的 SQL Server Express 中禁用了 sp_configure 选项“SMO 和 DMO XP”,则在使用 SAVESYSDB 卸载该早期实例,然后使用 USESYSDB 安装本版本时,将可能无法从命令...

    SQL Server的升级之路系列课程(3):从MSDE 2000升级到SQL Server 2005工作组版.rar

    本系列课程聚焦于SQL Server的升级路径,特别是从早期版本MSDE 2000升级到SQL Server 2005工作组版的过程。这一转变涉及多个关键知识点,包括数据库架构、性能优化、安全性提升以及兼容性调整。 首先,我们来了解...

Global site tag (gtag.js) - Google Analytics