我正在使用t-sql,我需要以自定义方式订购结果集。请考虑以下表格和查询:
CREATE TABLE DeleteMe
(Col1 INT)
INSERT INTO DeleteMe
VALUES
(0), (2), (2), (3), (4), (4), (4)
SELECT ROW_NUMBER() OVER (ORDER BY Col1) AS OrderBy, Col1 FROM DeleteMe
ORDER BY Col1
返回:
OrderBy Col1
1 0
2 2
3 2
4 3
5 4
6 4
7 4
然而,我需要的是:
OrderBy Col1
1 0
2 2
2 2
3 3
4 4
4 4
4 4
基本上,对于相同的Col1的每个值,OrderBy值应该相同。 OrderBy属性需要从1开始并且是顺序的。因此,如果删除了Col1 = 0的记录,结果将再次从1开始:
OrderBy Col1
1 2
1 2
2 3
3 4
3 4
3 4
我一直在玩Partition By和其他一些东西,我在这一点上很难过。任何帮助表示赞赏。
答案 0 :(得分:2)
使用Dense_Rank:
SELECT dense_rank() OVER (ORDER BY Col1) AS OrderBy, Col1 FROM DeleteMe
ORDER BY Col1