【问题标题】:MySQL query rows to columnsMySQL查询行到列
【发布时间】:2025-11-24 00:40:02
【问题描述】:

有谁知道如何在仍然加入的同时将行变成列?

SELECT p.id
     , f.title 'column'
     , v.value 
  FROM custom_fields f
  JOIN custom_field_values v
    ON v.custom_field_id = f.id
  JOIN projects p
    ON p.id = v.related_to_id
 WHERE p.deleted = 0

column 中的行应该是列并且仍然按 id 和 value 分组

所以它应该看起来像这样:

【问题讨论】:

  • 认真考虑处理应用代码中数据显示的问题

标签: mysql sql join pivot where-clause


【解决方案1】:

使用条件聚合:

select 
    p.id, 
    max(case when cf.title = 'Rental (FSG)' then cfv.value end) rental_fsg,
    max(case when cf.title = 'Model Year'   then cfv.value end) model_year,
    max(case when cf.title = 'Product'      then cfv.value end) product,
    max(case when cf.title = 'Partner'      then cfv.value end) partner,
    max(case when cf.title = 'SAP delivery / invoice number' then cfv.value end) sap_delivery
from custom_fields cf
join custom_field_values cfv on cfv.custom_field_id = cf.id
join projects p on p.id = cfv.related_to_id
where p.deleted = 0
group by p.id

请注意,我修改了您的查询以使用表别名(cfcfvp):它们使查询更易于编写和阅读。

【讨论】:

  • 如果我需要将 cfv 加入不同的表,例如 join clients c on c.id=p.client_id AND cfv.related_to_type = 'clients' join projects p on p.id = cfv.related_to_id AND cfv.related_to_type = '项目'