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

在Databricks SQL中实现行转列的动态转换方法

Databricks SQL行转列实现方案

针对你这种商品属性行存储转列存储的需求,Databricks SQL有两种常用的实现方式:

方法一:使用PIVOT函数(推荐)

PIVOT是SQL中专门用于行转列的语法,适合已知属性列名的场景,代码简洁高效:

SELECT *
FROM (
    SELECT Article, Attribute, Value
    FROM your_table_name  -- 替换成你的实际表名
)
PIVOT (
    MAX(Value)  -- 每个Article+Attribute组合唯一,用MAX/MIN/ANY_VALUE效果一致
    FOR Attribute IN (
        'Name' AS Name,
        'Size' AS Size,
        'Price' AS Price,
        'Costs' AS Costs,
        'Department' AS Department
    )
)
ORDER BY Article;

说明:

  • 内层子查询先提取核心的三列数据;
  • PIVOT子句中用聚合函数锁定每个属性对应的值,因为同一商品的同一属性只会有一条记录,所以任意聚合函数都能得到正确结果;
  • FOR Attribute IN列出所有需要转成列的属性,并指定最终列名;
  • 缺失属性的商品对应列会自动填充为NULL。

执行后得到的结果如下:

Article Name    Size Price Costs Department
A       Bike S  5    4     3     CR
B       Bike M  5    4     NULL  NULL
C       Bike L  NULL NULL  NULL  NULL

方法二:使用CASE WHEN + 聚合函数

如果需要更灵活的控制(比如对不同属性做类型转换),可以用CASE结合聚合函数的方式:

SELECT
    Article,
    MAX(CASE WHEN Attribute = 'Name' THEN Value END) AS Name,
    CAST(MAX(CASE WHEN Attribute = 'Size' THEN Value END) AS INT) AS Size,
    CAST(MAX(CASE WHEN Attribute = 'Price' THEN Value END) AS INT) AS Price,
    CAST(MAX(CASE WHEN Attribute = 'Costs' THEN Value END) AS INT) AS Costs,
    MAX(CASE WHEN Attribute = 'Department' THEN Value END) AS Department
FROM your_table_name  -- 替换成你的实际表名
GROUP BY Article
ORDER BY Article;

说明:

  • 每个CASE WHEN语句对应一个目标列,筛选出对应属性的值;
  • 用MAX聚合函数确保每个商品只返回一条记录;
  • 可以通过CAST函数将数字类型的属性(比如Size、Price)转换成INT,避免以字符串形式存储;
  • 缺失属性的列同样会填充为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:24:54