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

SQL Server基于行值的Pivot/Case查询:薪资列转置需求

解决SQL Server中基于Metric列值的数据转置问题

假设样本表结构与数据

先明确你的Person表和Value表可能的结构(若与实际不符,可自行调整字段名):

Person表

PersonIDName
1Bob
2John
3Alice

Value表

PersonIDMetricValue
1Salary50000
1Age30
2Salary60000
2Age35
3Age28

期望输出

NameSalary
Bob50000
John60000
AliceNULL

优化后的查询代码

使用条件聚合实现转置,这种方式比PIVOT更灵活,尤其适合仅提取单个Metric的场景:

SELECT 
    p.Name,
    -- 筛选Metric为Salary的值,无匹配则返回NULL
    MAX(CASE WHEN v.Metric = 'Salary' THEN v.Value END) AS Salary
FROM Person p
-- 左连接确保所有Person都出现在结果中,若仅需保留有Salary记录的人,改为INNER JOIN即可
LEFT JOIN Value v ON p.PersonID = v.PersonID
GROUP BY p.Name
ORDER BY p.Name;

代码逻辑说明

  1. CASE WHEN v.Metric = 'Salary' THEN v.Value END:仅当Metric列值为Salary时,取出对应的Value,其他情况返回NULL
  2. MAX()聚合函数:由于每个Person的Salary只会有一条记录,用MAX(或SUM/AVG均可)将同一Person的Salary值聚合到单行
  3. GROUP BY p.Name:保证每个Person仅生成一行结果
  4. LEFT JOIN:保留所有Person条目,即使无Salary记录(此时Salary列显示NULL)

额外适配说明

若Value列是字符串类型,需转换为数值类型的话,可修改CASE语句:

MAX(CASE WHEN v.Metric = 'Salary' THEN CAST(v.Value AS DECIMAL(18,2)) END) AS Salary

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:01:14