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

如何用SQL将各CompanyId下的交易价格按DealId并排展示?

行转列(Pivot)实现方案

你需要的是将同一CompanyId下不同DealId的价格从行转换为列,这是典型的SQL行转列操作,以下是两种通用实现方式:

方法1:条件聚合(兼容多数数据库)

这种方式适用于MySQL、PostgreSQL等不支持原生PIVOT语法的数据库,通过CASE WHEN结合聚合函数实现:

SELECT
    ROW_NUMBER() OVER (ORDER BY CompanyId) AS id,
    CompanyId AS companyId,
    MAX(CASE WHEN DealId = 1 THEN price END) AS DealName1,
    MAX(CASE WHEN DealId = 2 THEN price END) AS DealName2,
    MAX(CASE WHEN DealId = 3 THEN price END) AS DealName3
FROM
    your_table_name
GROUP BY
    CompanyId
ORDER BY
    CompanyId;

关键说明:

  • ROW_NUMBER()用于生成结果中的自增id(若原表已有按公司分组的唯一id,可替换为对应字段)
  • CASE WHEN匹配每个DealId,提取对应价格;MAX确保每个CompanyId仅返回一行数据
  • 若某公司无对应DealId的记录,对应列会返回NULL,可使用COALESCE(..., 'value')替换为默认值

方法2:PIVOT函数(适用于SQL Server/Oracle等)

如果你的数据库支持原生PIVOT语法,可使用更简洁的写法:

SELECT
    ROW_NUMBER() OVER (ORDER BY CompanyId) AS id,
    companyId,
    DealName1,
    DealName2,
    DealName3
FROM
    (SELECT CompanyId, DealId, price FROM your_table_name) AS source
PIVOT
    (MAX(price) FOR DealId IN ([1] AS DealName1, [2] AS DealName2, [3] AS DealName3)) AS pivot_table
ORDER BY
    companyId;

关键说明:

  • 子查询先提取需要的核心字段,再通过PIVOT将DealId的不同值转换为列
  • 聚合函数MAX用于确保每个CompanyId+DealId组合仅返回一条数据

注意事项:

  • 替换your_table_name为你实际的表名
  • 若DealId数量不固定(可能新增),需使用动态SQL生成列,具体语法因数据库而异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:47