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

SQL查询需求:将指定列转换为行(行列转置)

SQL列转行:将纯度(karatage)、单位重量(Unit weight)转为行

原始数据示例

假设你的原始查询结果结构如下:

LocationquantitykaratageUnit weight
A1018K5g
A1524K3g
B818K4g
B624K2g

目标输出格式

期望得到的结果(按Location聚合,将纯度对应的数量、单位重量转为列):

Location18K_quantity18K_Unit weight24K_quantity24K_Unit weight
A105g153g
B84g62g

解决方案

1. 通用数据库兼容方案(CASE+聚合函数)

这种方法适用于MySQL、PostgreSQL、SQL Server等绝大多数数据库,无需依赖特定语法:

SELECT
  Location,
  -- 提取18K对应的数量和单位重量
  MAX(CASE WHEN karatage = '18K' THEN quantity END) AS `18K_quantity`,
  MAX(CASE WHEN karatage = '18K' THEN `Unit weight` END) AS `18K_Unit weight`,
  -- 提取24K对应的数量和单位重量
  MAX(CASE WHEN karatage = '24K' THEN quantity END) AS `24K_quantity`,
  MAX(CASE WHEN karatage = '24K' THEN `Unit weight` END) AS `24K_Unit weight`
FROM your_table -- 替换为你的表名或原始查询语句
GROUP BY Location;

说明:如果有更多纯度类型(如14K),只需新增对应的CASE分支即可,聚合函数用MAX/MIN均可,因为同一Location+纯度组合只会有一个值。

2. SQL Server专用方案(PIVOT语法)

如果使用SQL Server,可以利用PIVOT语法简化操作:

SELECT
  Location,
  [18K_quantity], [18K_Unit weight],
  [24K_quantity], [24K_Unit weight]
FROM (
  -- 先构造转置所需的列名和对应值
  SELECT
    Location,
    CONCAT(karatage, '_quantity') AS pivot_col_qty,
    quantity AS pivot_val_qty,
    CONCAT(karatage, '_Unit weight') AS pivot_col_weight,
    `Unit weight` AS pivot_val_weight
  FROM your_table -- 替换为你的表名或原始查询语句
) AS src
-- 对数量进行转置
PIVOT (
  MAX(pivot_val_qty) FOR pivot_col_qty IN ([18K_quantity], [24K_quantity])
) AS pvt_qty
-- 对单位重量进行转置
PIVOT (
  MAX(pivot_val_weight) FOR pivot_col_weight IN ([18K_Unit weight], [24K_Unit weight])
) AS pvt_weight;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:45:36