MySQL 使用动态行值作为列名

MySQL Use dynamic row values as column names

我有这组数据(视图 table),是我用多个 table 构建的。

我的问题是,我无法以 'horizontal' 的方式显示它们。我搜索并找到了几个解决方案,但它们现在是 outdated.

他们使用数据透视表 table 或交叉表查询或 group_concat()。

所以我需要的结果是,动态 BoxName 将是一个列名,价格将在每个列名下。然后路线将是行 headers.

我的目标:

我尝试通过 jQuery 操作数据,但我失败了,所以我最后的办法是修复 MySQL 数据,这样 jQuery 显示就很容易了。

非常感谢任何帮助。

步骤 #1:获取列名称:

select distinct BoxName from t

例如,此查询将 return:

BoxName
-----------
Small Box    
Medium Box
Large Box
Regular Box
Jumbo Box

步骤 #2:Assemble 动态查询。现在您知道了列,您可以将主查询准备为:

select
  Route,
  max(case when BoxName = 'Small Box' then price end) as `Small Box`,
  max(case when BoxName = 'Medium Box' then price end) as `Medium Box`,
  max(case when BoxName = 'Large Box' then price end) as `Large Box`,
  max(case when BoxName = 'Regular Box' then price end) as `Regular Box`,
  max(case when BoxName = 'Jumbo Box' then price end) as `Jumbo Box`
from t
group by Route
order by max(display_order)