You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写SQL Server查询:按部门分组展示去重血型及员工总数

部门血型去重聚合与员工总数统计方案

要解决你遇到的问题——生成每个部门去重后的血型逗号分隔列表,同时统计部门员工总数,核心是先对血型去重再做聚合。直接用STRING_AGG会重复输出同一血型,所以得先过滤重复值再拼接。

方案一:使用CTE(清晰易读)

WITH DeptUniqueBloods AS (
    -- 先获取每个部门的所有唯一血型
    SELECT DISTINCT
        ed.department,
        eb.blood_type
    FROM empdeps ed
    JOIN empbloods eb ON ed.emp_id = eb.emp_id
)
SELECT
    department AS 部门名称,
    -- 拼接去重后的血型,按血型排序让列表更规整
    STRING_AGG(blood_type, ', ') WITHIN GROUP (ORDER BY blood_type) AS 去重血型列表,
    -- 统计对应部门的员工总数
    (SELECT COUNT(emp_id) FROM empdeps WHERE department = dub.department) AS 员工总数
FROM DeptUniqueBloods dub
GROUP BY department;

方案二:子查询写法

如果不想用CTE,也可以直接嵌套子查询实现:

SELECT
    department AS 部门名称,
    STRING_AGG(blood_type, ', ') WITHIN GROUP (ORDER BY blood_type) AS 去重血型列表,
    emp_count AS 员工总数
FROM (
    SELECT DISTINCT
        ed.department,
        eb.blood_type,
        -- 提前计算每个部门的员工数
        (SELECT COUNT(emp_id) FROM empdeps WHERE department = ed.department) AS emp_count
    FROM empdeps ed
    JOIN empbloods eb ON ed.emp_id = eb.emp_id
) AS DeptBloods
GROUP BY department, emp_count;

特殊场景处理

如果你的empdeps表中存在同一员工归属多个部门的情况,统计员工总数时要改用COUNT(DISTINCT emp_id),避免重复计数:

(SELECT COUNT(DISTINCT emp_id) FROM empdeps WHERE department = dub.department) AS 员工总数

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:18:21