我已经运行了下面的查询,我得到了这个意想不到的结果。分区关键字用于对提到的列进行分组,然后在每个组中为其分配一个唯一键,但在我的情况下,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
答案 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行。