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

如何在SQL中无需aggregation函数实现表的PIVOT转置?

解决PIVOT转置表无需聚合的问题

你的核心困惑是觉得PIVOT必须用聚合函数,但你的数据场景其实完全可以用聚合函数实现需求——问题出在你之前的写法有误,而非聚合函数本身不合适。

你的源数据中,每个国家(COUNTRY)和级别(LEVEL)的组合是唯一的,这意味着用MAX()或MIN()聚合时,每个分组只会返回唯一的那个数值,不会导致空值。

方法1:用PIVOT语法(适用于SQL Server、Oracle等支持PIVOT的数据库)

SELECT COUNTRY, High, Medium, Low
FROM (
    -- 先取出需要转置的核心列
    SELECT COUNTRY, LEVEL, NUMBER
    FROM 你的表名
) AS SourceData
PIVOT (
    MAX(NUMBER) -- 用MAX/MIN均可,因为每个组仅一个值
    FOR LEVEL IN (High, Medium, Low) -- 指定要转成列的LEVEL值
) AS PivotedTable;

方法2:条件聚合(通用所有SQL数据库,比PIVOT更灵活)

如果你的数据库不支持PIVOT(比如MySQL),可以用条件聚合实现同样效果:

SELECT
    COUNTRY,
    MAX(CASE WHEN LEVEL = 'High' THEN NUMBER END) AS High,
    MAX(CASE WHEN LEVEL = 'Medium' THEN NUMBER END) AS Medium,
    MAX(CASE WHEN LEVEL = 'Low' THEN NUMBER END) AS Low
FROM 你的表名
GROUP BY COUNTRY;

这两种写法都会输出你期望的结果,不会出现空值——因为每个CASE语句在对应级别下只会返回唯一的NUMBER值,聚合函数只是把这个值保留下来,没有实际的"聚合"操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:15:55