如何用SQL隐藏重复员工姓名?现有查询能否实现该需求?
实现SQL查询结果中隐藏重复员工姓名的方案
完全可以实现这个需求,核心是利用窗口函数标记同一员工的行,只在第一行显示姓名,后续行留空。下面是适配你现有查询的修改方案:
修改后的SQL语句(以Oracle为例)
SELECT CASE WHEN ROW_NUMBER() OVER (PARTITION BY XU.EMP_NAME ORDER BY XU.FUNCTION) = 1 THEN XU.EMP_NAME ELSE '' END AS EMP_NAME, XU.FUNCTION, XU.ROLE_ACCESS FROM XX_USERS XU LEFT JOIN XX_USERS_ACCESS XUA ON XU.EMP_ID=XUA.EMP_ID WHERE NVL(XU.STATUS,'N')='Y' ORDER BY XU.EMP_NAME, XU.FUNCTION
逻辑说明
PARTITION BY XU.EMP_NAME:按员工姓名分组,把同一员工的所有行归为一组ROW_NUMBER() OVER (...):给每组内的行按指定顺序(这里是XU.FUNCTION)编号,第一行编号为1CASE判断:如果是组内第一行,显示员工姓名;否则显示空字符串,达到隐藏重复姓名的效果
其他数据库适配提示
- 若使用MySQL 8.0+:将
NVL替换为IFNULL,语法其余部分一致 - 若使用SQL Server:将
NVL替换为ISNULL,语法其余部分一致
内容的提问来源于stack exchange,提问作者Moch Yuwan
相关产品推荐
相关产品推荐

