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

SQL实现员工办公与家庭手机号同值输出1行、异值输出2行查询

列拆行查询手机号实现方案

需求说明

Employee表结构如下:

字段名说明
EmpID员工ID
OfficeMobile办公手机号
HomeMobile家庭手机号

查询规则:

  • 输出列:EmpID、ContactNo(联系电话)
  • 若员工办公手机号与家庭手机号相同,输出1行记录
  • 若两个手机号不同,输出2行记录

示例源数据

EmpIDOfficeMobileHomeMobile
1123123
2456789

预期输出

EmpIDContact number
1123
2456
2789

原有语句问题

原有CASE写法仅能在单条记录内完成字段值选择,无法实现列值拆分为多行的逻辑,满足不了不同号码输出2行的要求。

正确SQL写法

用UNION合并两个手机号的查询结果即可,UNION自带的去重特性刚好自动过滤同个员工相同号码的重复行,写法通用、兼容所有主流数据库:

-- 匹配你原有语句里的表名、字段名可直接使用
SELECT ed.empId, ed.mobile_number AS contact
FROM employeeDetails AS ed
UNION
SELECT ed.empId, ed.home_number AS contact
FROM employeeDetails AS ed
ORDER BY empId;

如果对应表名、字段名和需求描述一致,可使用下面版本:

SELECT EmpID, OfficeMobile AS ContactNo
FROM Employee
UNION
SELECT EmpID, HomeMobile AS ContactNo
FROM Employee
ORDER BY EmpID;

逻辑说明

  • 第一段查询取出所有员工的办公手机号,第二段取出所有员工的家庭手机号
  • UNION会对两个查询的合并结果做全字段去重:同个员工两个手机号相同时,重复记录会被自动过滤,只保留1行;两个手机号不同时,两条记录都会保留,完全匹配需求
  • 末尾的ORDER BY用于让同个员工的记录排列在一起,和示例输出顺序保持一致,可根据实际业务需要选择是否添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:57:20