MySQL 使用动态行值作为列名
Posted
技术标签:
【中文标题】MySQL 使用动态行值作为列名【英文标题】:MySQL Use dynamic row values as column names 【发布时间】:2020-11-08 09:06:47 【问题描述】:我有这组由多个表构建的数据(查看表)。
我的问题是,我无法以“水平”方式显示它们。我搜索并找到了几个解决方案,但它们现在是outdated。
他们使用数据透视表或交叉表查询或 group_concat()。
所以我需要的结果是,动态 BoxName 将是一个列名,价格将在每个列名下。然后 Route 将成为行标题。
我的目标:
我尝试通过jQuery 操作数据,但失败了,所以我最后的办法是修复 mysql 数据,以便 jQuery 显示更容易。
非常感谢任何帮助。
【问题讨论】:
在 mysql 8 中仍然有效,如果您不使用 mysql 8 cte 将无法与以前的 mysql 版本一起使用,也不要发布图片作为数据 您可以通过两个步骤完成:1) 获取变体,即使用简单查询的列名称。 2) 使用动态 SQL,您可以组装生成所需表的查询。 考虑处理应用代码中数据显示的问题 【参考方案1】:第 1 步:获取列名:
select distinct BoxName from t
例如,此查询将返回:
BoxName
-----------
Small Box
Medium Box
Large Box
Regular Box
Jumbo Box
第 2 步:组装一个动态查询。现在您知道了列,您可以将主查询准备为:
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)
【讨论】:
以上是关于MySQL 使用动态行值作为列名的主要内容,如果未能解决你的问题,请参考以下文章