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

如何用SQL将指定企业的Director、Manager、Sales信息按行展示?

解决方案

你要实现的是把Corporate表中同一企业的三个职位ID列拆分成多行记录(每行对应一个职位+员工信息),这属于列转行操作——PIVOT是用来做行转列的,所以这里得用UNPIVOT或者UNION ALL来搞定,以下是具体实现方案:

方法1:用UNION ALL拆分列

这种方式逻辑直白,容易理解,就是分别查询三个职位的员工信息再合并结果:

SELECT 
    'Director' AS Position,
    e.FirstName,
    e.LastName
FROM Corporate c
JOIN Employee e ON c.DirectorId = e.EmployeeId
WHERE c.CorporateId = 3

UNION ALL

SELECT 
    'Manager' AS Position,
    e.FirstName,
    e.LastName
FROM Corporate c
JOIN Employee e ON c.ManagerId = e.EmployeeId
WHERE c.CorporateId = 3

UNION ALL

SELECT 
    'Sales' AS Position,
    e.FirstName,
    e.LastName
FROM Corporate c
JOIN Employee e ON c.SalesId = e.EmployeeId
WHERE c.CorporateId = 3

方法2:用UNPIVOT实现列转行

如果想用和PIVOT对应的反向操作,UNPIVOT可以直接把多列转换成多行结构:

SELECT 
    upvt.Position,
    e.FirstName,
    e.LastName
FROM (
    -- 先把Corporate的三个职位ID列转成(职位,员工ID)的行格式
    SELECT 
        CorporateId,
        Position,
        EmployeeId
    FROM Corporate
    UNPIVOT (
        EmployeeId FOR Position IN (DirectorId, ManagerId, SalesId)
    ) AS upvt
    WHERE CorporateId = 3
) AS corp_unpivoted
-- 关联Employee表获取员工姓名
JOIN Employee e ON corp_unpivoted.EmployeeId = e.EmployeeId

补充说明

  • PIVOT的作用是把多行的同维度数据转成多列,和你当前的需求正好相反,所以不适用。
  • 两种方法最终都会输出相同结果:针对企业3,每行显示一个职位以及对应的员工姓名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:15:33