Тар*_*кий 1 sql t-sql sql-server
我创建了一个简单的表格来说明我的问题:
DECLARE @Test TABLE
(
id int,
Type VARCHAR(10),
SectionId int
)
Insert into @Test
SELECT 1,'RED', 100
UNION ALL SELECT 2, 'RED', 100
UNION ALL SELECT 3, 'BLUE', 100
UNION ALL SELECT 4, 'RED', 200
UNION ALL SELECT 5, 'BLUE', 200
UNION ALL SELECT 6, 'RED', 300
UNION ALL SELECT 7, 'BLUE', 300
UNION ALL SELECT 8, 'BLUE', 300
Run Code Online (Sandbox Code Playgroud)
所以我想为每一行提供行号,但在Type和SectionId 相同时重复它:
id, Type, SectionId, RowNumber
1, 'RED', 100 1
2, 'RED', 100 1
3, 'BLUE',100 2
4, 'RED', 200 1
5, 'BLUE',200 2
6, 'RED', 300 1
7, 'BLUE',300 2
8, 'BLUE',300 2
Run Code Online (Sandbox Code Playgroud)
如果我尝试,ROW_NUMBER() Over (Partition by SectionId, Type Order by id)我会得到这样的结果:
id, Type, SectionId, RowNumber
1, 'RED', 100 1
2, 'RED', 100 2
3, 'BLUE',100 1
4, 'RED', 200 1
5, 'BLUE',200 1
6, 'RED', 300 1
7, 'BLUE',300 1
8, 'BLUE',300 2
Run Code Online (Sandbox Code Playgroud)
请告诉我是否有任何方法可以做到这一点。
我使用的数据库是 Microsoft SQL Server (ver. 14.00.3045)
使用dense_rank()代替row_number():
SELECT id, type, sectionid
, dense_rank() OVER (PARTITION BY sectionid ORDER BY type DESC) AS RowNumber
FROM test
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)
SELECT id, type, sectionid
, dense_rank() OVER (PARTITION BY sectionid ORDER BY type DESC) AS RowNumber
FROM test
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)