sql - 如何更改我的 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()
功能不适合用于我所追求的功能。
任何帮助,将不胜感激。
解决方案
我想你想要DENSE_RANK
这里而不是ROW_NUMBER()
:
SELECT [ID], [Name], [Address], [Company],
DENSE_RANK() OVER (PARTITION BY [emp_code]
ORDER BY [Address]) AS DenseRank
FROM [tbl1];
演示
推荐阅读
- python - 如何在python中动态添加for循环
- qt - 如何在安装 Qt Installer Framework 生成的安装文件前自动卸载
- game-engine - 如何更改godot中的角色皮肤?
- c# - 使用 C#,如何确定是哪个进程锁定了一个文件夹?
- json - Sql Server OPENJSON 返回 unicode 字符串
- java - 在线程之间安全地发送类似数据包的对象,无需内部同步
- c++ - std::__gcd 和 std::gcd 有什么区别?
- c# - 如何在 TableClient.QueryAsync() [Azure.Data.Tables] 中筛选分页查询结果
- c++ - 如何使模板重载复制构造函数?
- odoo - (Odoo)显示来自 url 的图像而不将其存储在数据库中