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

如何在连接两张表时使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:30:51