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()功能不适合用于我所追求的功能。
任何帮助,将不胜感激。
我认为你想要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)