You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server 2012中按部门分组取最大员工编号的SQL实现求助

解决按部门分组获取最大员工编号的问题

嘿,我明白你的需求啦!你之前用UNION组合查询失败是因为UNION的作用是合并两个独立的结果集,而你需要的是把每个部门和该部门内最大的员工编号关联起来,这得用分组或者窗口函数来实现,下面给你两种靠谱的方案:

方案一:用窗口函数(灵活通用)

这个方法适合大多数支持窗口函数的数据库(比如SQL Server、MySQL 8.0+、PostgreSQL等),逻辑清晰,还能扩展获取更多关联字段:

WITH ranked_employees AS (
    SELECT 
        LEFT(employeeidno, 4) AS deptcode,
        RIGHT(employeeidno, 7) AS empno,
        -- 按部门分区,每个部门内按员工号降序排名
        ROW_NUMBER() OVER (PARTITION BY LEFT(employeeidno, 4) ORDER BY RIGHT(employeeidno, 7) DESC) AS rn
    FROM employeemasterfile
)
-- 取每个部门排名第一的记录(也就是员工号最大的那条)
SELECT deptcode, empno
FROM ranked_employees
WHERE rn = 1
ORDER BY deptcode ASC;

方案二:用GROUP BY + MAX()(简洁高效)

如果你的需求只是获取每个部门的最大员工号,这个方法更直接,性能也不错:

SELECT 
    LEFT(employeeidno, 4) AS deptcode,
    -- 直接取每个部门内员工号的最大值
    MAX(RIGHT(employeeidno, 7)) AS max_empno
FROM employeemasterfile
GROUP BY LEFT(employeeidno, 4)
ORDER BY deptcode ASC;

这里因为员工号是固定7位的字符串(带前导零),用MAX()按字符串排序的结果和数字排序完全一致,所以可以直接用。

为什么UNION不行?

你之前尝试的UNION是用来合并两个不相关的结果集(比如把部门编码列表和最大员工号列表拼在一起),但这两个结果集之间没有关联关系,所以根本没法对应到每个部门自己的最大员工号,这就不是UNION该干的活儿啦~

内容的提问来源于stack exchange,提问作者pjustindaryll

火山引擎 最新活动