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

SQL表连接时如何实现重复部门信息仅首行显示其余行空白的查询方案?

解决方案:实现邮件合并所需的部门信息仅首行显示效果

这个需求在Word邮件合并场景里确实能简化域代码设置,避免重复打印部门内容,我给你提供一个基于窗口函数的SQL实现方案,主流数据库(SQL Server、MySQL、PostgreSQL等)都支持。

核心思路

利用ROW_NUMBER()窗口函数,按部门ID分组,给每个部门下的功能行分配序号,然后通过CASE判断:仅当是该部门的第一行时显示部门ID和名称,后续行对应字段留空。

具体SQL语句

SELECT
    -- 仅第一行显示部门ID,其余行留空
    CASE WHEN rn = 1 THEN t1.[Department ID] ELSE '' END AS [Department ID],
    -- 仅第一行显示部门名称,其余行留空
    CASE WHEN rn = 1 THEN t1.Department ELSE '' END AS Department,
    t2.[Function ID],
    t2.Function
FROM
    Table1 t1
INNER JOIN
    (
        -- 给每个部门下的功能行编号
        SELECT 
            *,
            ROW_NUMBER() OVER (PARTITION BY [Department ID] ORDER BY [Function ID]) AS rn
        FROM Table2
    ) t2
ON
    t1.[Department ID] = t2.[Department ID]
ORDER BY
    t1.[Department ID],
    t2.[Function ID];

效果验证

执行后会得到你想要的Table4格式:

Department IDDepartmentFunction IDFunction
1XYZ1ABC
2DEF

补充说明

  • 如果你的数据库对空值显示有要求,可以把ELSE ''换成ELSE NULL,多数邮件合并工具会把NULL识别为空内容;
  • PARTITION BY [Department ID]确保每个部门的序号独立编号,ORDER BY [Function ID]保证功能行的排序稳定;
  • 不同数据库的语法细节可能略有差异(比如MySQL用反引号``包裹字段名,SQL Server用方括号[]),根据你的实际数据库调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:32:31