1

我在 mysql 中有一个名为“prices_x”的表,如下所示:

ID Fecha Hora hfmachine1 hcmachinex hfmachiney hfmachinez hfmachinep 等...
1 12/01/01/ 00:00 90 100 100 98 78 等...
2 12/01/02/ 01:00 90 100 100 98 78 等...

我还有其他名为“prices_y”的列具有相同的列但具有不同的值。

ID Fecha Hora hfmachine1 hcmachinex hfmachiney hfmachinez hfmachinep 等...
1 12/01/01/ 00:00 50 40 80 76 89 等...
2 12/01/02/ 01:00 60 40 90 30 23 等

我想用 php 做一个报告页面,但首先我需要在其中转换我的表格。只想在特定的日期和时间显示所有机器(我知道该怎么做),但我不知道如何将我的列转换为行,我正在尝试一切,但我找不到解决方案。

ID 机器价格_x、价格_y
1 高频机 90 50
2 hfmachinex 100 40
3 高频机械 100 80
4 高频机 98 76
5 hfchinep 78 89

谢谢。

4

1 回答 1

3

您要实现的这个过程称为unpivot。不幸的是,MySQL 没有任何 UNPIVOT 函数,但您可以使用 UNION ALL 查询来获取结果。

UNION ALL 将多列转换为多行。您可以对每个表执行此操作,然后在fecha,hora和列名上加入表。查询将类似于以下内容:

select x.col, 
  x.price_x,
  y.price_y
from
(
  select id, fecha, hora, 'hfmachine1' col, hfmachine1 price_x
  from prices_x
  union all
  select id, fecha, hora, 'hcmachinex' col, hcmachinex price_x
  from prices_x
  union all
  select id, fecha, hora, 'hfmachiney' col, hfmachiney price_x
  from prices_x
  union all
  select id, fecha, hora, 'hfmachinez' col, hfmachinez price_x
  from prices_x
  union all
  select id, fecha, hora, 'hfmachinep' col, hfmachinep price_x
  from prices_x
) x
left join
(
  select id, fecha, hora, 'hfmachine1' col, hfmachine1 price_y
  from prices_y
  union all
  select id, fecha, hora, 'hcmachinex' col, hcmachinex price_y
  from prices_y
  union all
  select id, fecha, hora, 'hfmachiney' col, hfmachiney price_y
  from prices_y
  union all
  select id, fecha, hora, 'hfmachinez' col, hfmachinez price_y
  from prices_y
  union all
  select id, fecha, hora, 'hfmachinep' col, hfmachinep price_y
  from prices_y
) y
  on x.fecha = y.fecha
  and x.hora = y.hora
  and x.col = y.col;

演示

如果可能的话,我的建议是考虑对表格进行规范化,这将使查询数据变得更加容易。

于 2013-05-20T18:52:24.713 回答