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

如何按文档类型设置列别名并合并同一员工的多行查询结果?

解决员工文档信息合并到同一行的SQL问题

嗨,这个问题我之前也碰到过!你现在的查询之所以会出现同一员工多行且大量NULL的情况,核心原因是GROUP BY里包含了emp_doc.doc_id_id和emp_doc.doc_no——这会让数据库把每个不同的文档类型都当成独立分组,自然每个分组里只有对应类型的文档号有值,其他字段只能返回NULL。

要实现把同一员工的所有文档合并到一行的需求,你需要用**聚合函数(比如MAX())**把每个CASE语句的结果“收拢”起来,同时调整GROUP BY的字段,只保留员工的唯一标识和姓名,不需要包含文档相关字段。

修改后的SQL查询

SELECT 
    emp_dta.emp_name, 
    MAX(CASE WHEN emp_doc.doc_id_id = 1 THEN emp_doc.doc_no END) AS Iqama, 
    MAX(CASE WHEN emp_doc.doc_id_id = 2 THEN emp_doc.doc_no END) AS Passport, 
    MAX(CASE WHEN emp_doc.doc_id_id = 3 THEN emp_doc.doc_no END) AS DrivingLicence, 
    MAX(CASE WHEN emp_doc.doc_id_id > 3 THEN emp_doc.doc_no END) AS OtheDocument 
FROM emp_dta 
INNER JOIN emp_doc ON emp_dta.emp_id = emp_doc.doc_emp_id 
GROUP BY emp_dta.emp_id, emp_dta.emp_name
ORDER BY emp_dta.emp_name;

为什么这样能解决问题?

  • MAX()函数会自动忽略NULL值,只保留每个分组(即每个员工)下对应文档类型的非NULL文档号;
  • GROUP BY只按emp_id和emp_name分组,确保每个员工只会生成一行结果;
  • 每个CASE语句负责匹配对应的文档类型,聚合函数把同一员工的所有文档类型结果合并到同一行。

执行这个查询后,你就能得到期望的结果:同一员工的所有文档信息都在一行里展示,没有多余的NULL和分散的行。

内容的提问来源于stack exchange,提问作者Dr. MAF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:53:14