0

我正在使用 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

返回:

按 Col1 排序

1 0

2 2

3 2

4 3

5 4

6 4

7 4

但是,我需要的是:

按 Col1 排序

1 0

2 2

2 2

3 3

4 4

4 4

4 4

本质上,对于 Col1 的每个相同值,OrderBy 值应该相同。OrderBy 属性需要从 1 开始并且是连续的。因此,如果您删除 Col1 = 0 的记录,结果将再次从 1 开始:

按 Col1 排序

1 2

1 2

2 3

3 4

3 4

3 4

我一直在玩 Partition By 和其他一些东西,在这一点上我很难过。任何帮助表示赞赏。

4

1 回答 1

2

使用 Dense_Rank:

SELECT dense_rank() OVER (ORDER BY Col1) AS OrderBy, Col1 FROM DeleteMe
ORDER BY Col1
于 2013-10-07T22:35:43.093 回答