如何更改 T-SQL 查询中的行号行为?

use*_*933 1 sql t-sql sql-server

我正在使用 SQL Server 2014 并且我有以下针对表 (tbl1) 运行的 T-SQL 查询。

tbl1 的摘录:

emp_code     Name     Address   Company
---------------------------------------
100          Peter    London     ABC
125          Allan    Cambridge  DCE
125          Allan    Cambridge  DCE
115          John     Suffolk    ABC
115          John     Suffolk    XYZ
154          Mary     Highlands  ABC
154          Mary     Bristol    ABC
124          Mary     Chester    ABC
Run Code Online (Sandbox Code Playgroud)

我的 T-SQL 查询如下:

SELECT
    [ID],
    [Name],
    [Address],
    [Company],
    ROW_NUMBER() OVER (PARTITION BY [emp_code] ORDER BY [Address]) AS RowNumber
FROM
    [tbl1]
Run Code Online (Sandbox Code Playgroud)

上述查询的输出:

emp_code         Name     Address   Company    RowNumber
--------------------------------------------------------
    100          Peter    London     ABC          1
    125          Allan    Cambridge  DCE          1
    125          Allan    Cambridge  DCE          2
    115          John     Suffolk    ABC          1
    115          John     Suffolk    XYZ          2
    154          Mary     Highlands  ABC          1
    154          Mary     Bristol    ABC          2 
    154          Mary     Chester    ABC          3
Run Code Online (Sandbox Code Playgroud)

我追求的输出:

emp_code         Name     Address   Company    RowNumber
---------------------------------------------------------
    100          Peter    London     ABC          1
    125          Allan    Cambridge  DCE          1
    125          Allan    Cambridge  DCE          1
    115          John     Suffolk    ABC          1
    115          John     Suffolk    XYZ          1
    154          Mary     Highlands  ABC          1
    154          Mary     Bristol    ABC          2 
    154          Mary     Chester    ABC          3
Run Code Online (Sandbox Code Playgroud)

我希望我的 RowNumber(或根据需要更改列名)根据[Address]每个[emp_code]. 如果员工有相同的地址,它应该具有相同的值(即 1)。否则,它应该给出与员工“玛丽”(输出上方)的情况一样的值。

我假设该Row_Number()功能不适合用于我所追求的功能。

任何帮助,将不胜感激。

Tim*_*sen 5

我认为你想要DENSE_RANK这里而不是ROW_NUMBER()

SELECT [ID], [Name], [Address], [Company],
       DENSE_RANK() OVER (PARTITION BY [emp_code] 
                          ORDER BY [Address]) AS DenseRank
FROM [tbl1];
Run Code Online (Sandbox Code Playgroud)

来自下面演示链接的屏幕截图

演示