如何在连接两张表时使用PIVOT?SQL Server 2017技术问询
解决方案
可以通过关联两张表结合PIVOT操作实现需求,具体查询语句如下:
SELECT ProjectId, ProjectScore, ISNULL(Jack, '') AS Jack, ISNULL(John, '') AS John, ISNULL(Mark, '') AS Mark FROM ( -- 先关联两张表,获取包含所有必要字段的基础数据集 SELECT t1.ProjectId, t1.ProjectScore, t2.PersonName, t2.GivenScore FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ProjectId = t2.ProjectId ) AS SourceData PIVOT ( -- 用MAX聚合,因每个ProjectId+PersonName组合仅一条记录,聚合后即为对应评分 MAX(GivenScore) -- 指定要转为列的人员名称 FOR PersonName IN (Jack, John, Mark) ) AS PivotTable ORDER BY ProjectId;
关键说明:
- 表关联逻辑:使用
LEFT JOIN保证Table1中所有项目都能被保留,即使Table2中没有对应人员的评分(比如Project3的Mark)。 - PIVOT核心:
- 聚合函数选
MAX是因为每个ProjectId与PersonName的组合唯一,MAX/SUM结果一致,此处用MAX更直观。 FOR PersonName IN (Jack, John, Mark)明确指定要转成列的固定人员名称,若人员不固定则需用动态SQL,你的场景中人员是固定值,直接写即可。
- 聚合函数选
- 空值处理:用
ISNULL将NULL值转为空字符串,和你给出的示例输出格式完全匹配;若需保留数值类型的NULL,可删除ISNULL部分。
内容的提问来源于stack exchange,提问作者Jesus Hamdi
相关产品推荐
相关产品推荐

