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)
我有这组数据(视图 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)