分区没有给出预期的结果

时间:2014-02-12 01:48:32

标签: sql

我已经运行了下面的查询,我得到了这个意想不到的结果。分区关键字用于对提到的列进行分组,然后在每个组中为其分配一个唯一键,但在我的情况下,prnk只给出1和2。它不是为不同的工资价值创建一个不同的组。

Declare @Temptable table(EID int ,
Salary int,
Ename varchar(80)
)

INSERT INTO @Temptable values (1,500,'Dev')
INSERT INTO @Temptable values (2,1500,'Dev1')
INSERT INTO @Temptable values (3,1700,'Dev2')
INSERT INTO @Temptable values (4,500,'Dev3')
INSERT INTO @Temptable values (5,600,'Dev4')
INSERT INTO @Temptable values (6,900,'Dev5')
INSERT INTO @Temptable values (7,20000,'Dev6')

--select * from @Temptable
SELECT 
        rnk=row_number() over (order by Salary desc),
        prnk=row_number() over (partition by salary  order by salary ),     
        * FROM @Temptable 

2 个答案:

答案 0 :(得分:2)

如果“每个工资值的不同组”是指值的排名,请使用rank()dense_rank()代替row_number()

SELECT prnk=dense_rank() over (order by salary ),     

答案 1 :(得分:0)

如果按工资划分,您的数据将分为6组:

EID  Salary  Ename  row_number

1    500    'Dev'   1
4    500    'Dev3'  2

----

5    600    'Dev4'  1

----

6    900    'Dev5'  1

----

2    1500   'Dev1'  1

----

3    1700   'Dev2'  1

----

7    20000   'Dev6'  1

然后在每个组中应用row_number。因此,只有两个元素的第一组(“500”)将应用行号1和2。其他组只有一行,因此只会出现第1行。