首页 > 解决方案 > 如何更改我的 T-SQL 查询中的行号行为?

问题描述

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

我的 T-SQL 查询如下:

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

上述查询的输出:

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

我追求的输出:

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

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

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

任何帮助,将不胜感激。

标签: sqlsql-servertsql

解决方案


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

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

下面演示链接的屏幕截图

演示


推荐阅读