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

如何编写SELECT语句实现列转行:拆分利润列为类型与利润字段

SQL行转列:将宽表转换为纵向结构

原始表结构与数据

假设表名为shop_profits,数据如下:

+------+--------------+--------------+
| SHOP | BUY_PROFIT   | SELL_PROFIT  |
+------+--------------+--------------+
| A    |           10 |         15 |
+------+--------------+--------------+

目标结果集

需要转换为以下纵向结构:

+------+------+--------+
| SHOP | TYPE | PROFIT |
+------+------+--------+
| A    | BUY  |     10 |
| A    | SELL |     15 |
+------+------+--------+

解决方案

方法1:通用UNION ALL写法(所有SQL数据库支持)

通过两次查询分别提取BUY_PROFIT和SELL_PROFIT字段,再合并结果:

SELECT SHOP, 'BUY' AS TYPE, BUY_PROFIT AS PROFIT
FROM shop_profits
UNION ALL
SELECT SHOP, 'SELL' AS TYPE, SELL_PROFIT AS PROFIT
FROM shop_profits;
  • 选用UNION ALL而非UNION,因为不会产生重复行,执行性能更优。

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

如果你的数据库支持UNPIVOT操作,可以用更简洁的语法实现:

SELECT SHOP, TYPE, PROFIT
FROM shop_profits
UNPIVOT (
    PROFIT FOR TYPE IN (BUY_PROFIT AS 'BUY', SELL_PROFIT AS 'SELL')
) AS unpvt;
  • UNPIVOT会自动将指定的横向列转换为纵向行,同时映射TYPE字段的对应值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:00:28