从Microsoft SqlServer 2005中返回有一定顺序的记录集

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

摘要:

应用SqlServer2005开发也已经有一段时间了,但是很多时候都是把SqlServer2005当做SqlServer2000来用,因此很多SqlServer2005的新特性我都没有用到,有一个原因就是要兼容SqlServer2000的用户。新特性出来的当然就要用于实际当中,要想知道SQLServer2005的新特性可以参看微软网站的What's New in SQL Server 2005? ,特性有很多本篇文章主要介绍的是在数据库中返回特定顺序的记录集。

数据库模型:

    在我们深入Sql排序语句时,我们先来看看数据库模型,也就是我们要建立一个数据库并通过这个数据库来进行我们的讲解。我们建立一个产品数据库,首先我们要建立一个产品表Products,包含ProductID(主键),Name,Price三个字段.这是一个很简单的数据库,下面我们就运用这个数据库来讲解以下排序。

    SQLServer2005提供我们四个排序函数:ROW_NUMBERRANKDENSE_RANKNTILE,(据我了解)这四个函数在SqlServer2000中是没有的,在不同的场合我们可以选用这四个函数,他们各有各的特点,下面我们就逐个来看一下他们各个的特性。

ROW_NUMBER():

    这个函数是通过对特定列来排序的,也就是说我们要指定按哪个列来排序。我们要知道他的特性当然首先我们要知道他的语法:

     ROW_NUMBER()  OVER ( [ partition ]   order - by - clause)

    先看例子,例如我们要从产品Products中的每一个产品按价格的高低排列出来,并得到每一个产品所在的序列号,代码如下:

SELECT [ProductID][Name][Price]
       ROW_NUMBER() 
OVER(ORDER BY [Price] DESCAS Rank
FROM Products

 

    则在返回的结果中将会出现Rank列,此列将从1开始逐行加1(1,2,3,…),这样我们就可以很灵活的应用这个功能来分页提取记录。下面我们来看看怎样来实现快速分页,假设我们每页显示的记录数位@PageSize,当前页面为@PageIndex,我们就可以用如下代码来进行分页:

SELECT   TOP ( @PageSize [ ProductID ] , [ Name ] , [ Price ]
  
FROM
  (
SELECT   [ ProductID ] , [ Name ] , [ Price ] , ROW_NUMBER()  OVER ( ORDER   BY   [ Price ]   DESC AS  Rank 
FROM  Products
  ) 
AS  p
  
WHERE  Rank  BETWEEN  (( @PageIndex   - 1 ) * @PageSize   + 1 AND   @PageSize * @PageIndex

RANK()DENSE_RANK():

   从上面的例子中我们知道了ROW_NUMBER()函数可以返回按一定列排列的行号。但是在两个相同记录中,例如我们的产品甲和乙的价格都为1RMB,在ROW_NUMBER()中将返回甲乙的顺序为#1,#2。但是有时候我们需要的是相同的记录返回相同的行号,如上面所说的将返回的行号为(甲) #1(乙)#1,这样我们就需要用到这里所要讲述的两个函数RANK()和DENSE_RANK()函数。用法和ROW_NUMBER的用法一样:

SELECT   [ ProductID ] [ Name ] [ Price ]
       RANK() 
OVER ( ORDER   BY   [ Price ]   DESC AS  Rank
FROM  Products

 我们可以知道RANK()和DENSE_RANK()都能达到效果,而不同的是,RANK()将跳过相同的记录数的行号。也就是说虽然行号相同,但是下页个不同列值的行号将是这几个行号之和加上他们的行号。如上述的甲乙为#1,用RANK()者返回丙的结果为#3,而DENSE_RANK()返回丙的结果为#2。

NTILE():

  当我们需要将给过分组排序时就要用到NTILE(),例如我们将所有的产品按照价格的高低从大到小分为5组,我们就可以用如下代码:

    SELECT  ProductID, Name, Price, NTILE( 5 OVER  ( ORDER   BY  Price  DESC as  p
    FROM  Produts

  这样将所有记录分成5份,按价格高低有1到5分开。

总结:

    本文讲述的四个函数ROW_NUMBERRANKDENSE_RANKNTILE都能够排序返回记录集,我想用的最多的就是应用ROW_NUMBER进行快速分页。其实他们四个各有各的特点,在我们平时的应用中灵活应用他们能够给我们带来很多的便利,很多的快乐!同时也希望这篇文章能够给大家带来点帮助,带来一点快乐!                           本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/05/06/sqlserver2005_feature_rankedresult.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
SQL 数据库连接 网络安全
thinkphp SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:14090086:SSL routine
thinkphp SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:14090086:SSL routine
758 0
|
24天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
2月前
|
SQL 存储 数据安全/隐私保护
|
3月前
|
监控 数据库 开发工具
使用Telegraf+Grafana监控Microsoft SQLServer数据库
使用Telegraf+Grafana监控Microsoft SQLServer数据库
66 1
|
4月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
90 0
|
4月前
|
SQL 关系型数据库 Apache
Microsoft SQL Server 迁移到 PostgreSQL 利器:Babelfish
Babelfish for PostgreSQL 加速了将 Microsoft SQL Server 应用程序迁移到 PostgreSQL 的旅程。Babelfish for PostgreSQL 是一个开源项目,可在 Apache 2.0 和 PostgreSQL 许可下使用。它使 PostgreSQL 能够理解来自 Microsoft SQL Server 编写的应用程序的查询。Babelfish 了解 SQL Server 有线协议和 Microsoft SQL Server 查询语言 T-SQL,此您不必切换数据库驱动程序或重新编写所有应用程序查询。
327 0
|
9月前
|
SQL JSON 数据库连接
Blueprints Microsoft SQL Server Connector / UE4 | DTSQLServer插件使用说明
Blueprints Microsoft SQL Server Connector / UE4 | DTSQLServer插件使用说明
62 0
|
SQL 存储 数据可视化
如何使用码匠连接 Microsoft SQL Server
目前码匠已经实现了与 Microsoft SQL Server 数据源的连接,能让您快速、高效地搭建应用和内部系统。
112 0
如何使用码匠连接 Microsoft SQL Server
|
SQL 机器学习/深度学习 数据库
|
SQL 存储 Oracle
数据库深度剖析:Oracle、Microsoft SQL Server、MySQL 三者有何区别?
数据库深度剖析:Oracle、Microsoft SQL Server、MySQL 三者有何区别?
158 0
数据库深度剖析:Oracle、Microsoft SQL Server、MySQL 三者有何区别?