排名函数是SQL SERVER2005新增的函数。排名函数总共有四种,分别是:row_number、rank、 dense_rank 、ntile。
row_number:顺序生成序号。
rank:相同的序值序号相同,但序号会跳号。
dense_rank :相同的序值序号相同,序号顺序递增。
ntile:装桶,把记录分成指的桶数,编序号。
RANK
rank函数用于返回结果集的分区内每行的排名, 行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。可能我描述的比较苍白,理解起来也比较吃力,我们直接上代码,rank函数的使用方法与row_number函数完全相同。
select RANK() OVER(order by [UserId]) as rank,* from [Order]
----------------------
还没用过 SQL2005 来,没接触过这个函数。
你对照这个说明,去检查:
1、你的SQL版本是多少,能不能支持这个函数。
2、把SQL命令拆分为最简单的,然后一步一步的添加条件,看看到哪一步出现错误。针对错误再进行分析处理。
--------------------
对照示例
select rank() over(order by zongfen) tt,*
from tj_j1
这个 tt
是你用来显示的列名吗?如果是,那就是少了 as
如果不是,那就是一个字段名,那就是少了 逗号。