开发者社区 问答 正文

如何创建MySQL动态枢轴行到列

我正在寻求解决以下问题:

SELECT DISTINCT
    _2_12_company.companyInitials,
    _2_05_comptype.typeInitials
FROM
    _2_12_company,
    _2_05_comptype,
    _2_19_companycomptype
WHERE
    _2_12_company.id = _2_19_companycomptype.companyID 
   AND _2_05_comptype.id = _2_19_companycomptype.typeID

这是结果

AMAZON  |  MICROSOFT
AMAZON  |  FACEBOOK
AMAZON  |  ALI EXPRESS

但我希望结果以动态的方式像下面这样

AMAZON  |  MICROSOFT/FACEBOOK/ALI EXPRESS

展开
收起
几许相思几点泪 2019-12-08 21:54:35 420 分享 版权
阿里云 AI 助理回答

你的问题实际上是在数据库查询中如何实现将相同公司名称(companyInitials)的不同类型(typeInitials)合并到同一行显示。在SQL中,可以使用GROUP_CONCAT函数(MySQL)或STRING_AGG函数(PostgreSQL)来实现这样的需求。由于你没有指定具体的数据库类型,我将提供一个在MySQL中的解决方案示例:

SELECT 
    _2_12_company.companyInitials,
    GROUP_CONCAT(DISTINCT _2_05_comptype.typeInitials ORDER BY _2_05_comptype.typeInitials SEPARATOR '/') AS combinedTypes
FROM
    _2_12_company
JOIN
    _2_19_companycomptype ON _2_12_company.id = _2_19_companycomptype.companyID
JOIN
    _2_05_comptype ON _2_05_comptype.id = _2_19_companycomptype.typeID
GROUP BY
    _2_12_company.companyInitials;

在这个查询中,我做了以下几点修改:

  1. 使用了JOIN语法:这比直接在FROM子句中列出所有表更清晰,也更符合现代SQL的书写习惯。
  2. 引入了GROUP_CONCAT函数:这个函数会将同一个公司名下的所有类型初始字母用指定的分隔符(这里是/)连接起来。
  3. 添加了DISTINCT关键字:确保每个公司对应的类型列表中不包含重复的类型初始字母。
  4. 使用了ORDER BY:在GROUP_CONCAT内部排序,以保持结果的一致性和可读性。
  5. 增加了GROUP BY子句:按照公司名称进行分组,这是使用GROUP_CONCAT的前提。

请根据你实际使用的数据库系统调整函数名,比如如果使用的是PostgreSQL,应使用STRING_AGG替代GROUP_CONCAT

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答