MySQL数据透视表字段命名为行中的值

时间:2013-01-03 16:01:13

标签: mysql sql pivot unpivot

我是新手,所以我来这里是为了得到一些建议。我有一个表格,其中包含字段benchmark名称和值。但是,另一个表的填充方式不同且不受我的控制:它将每个基准名称作为表中的自己的字段,行值为值。布局如下:

表1

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stream    | double      | YES  |     | NULL    |       |
| pisec     | double      | YES  |     | NULL    |       |
| iozws     | double      | YES  |     | NULL    |       |
| iozwb     | double      | YES  |     | NULL    |       |
| iozrs     | double      | YES  |     | NULL    |       |
| iozrb     | double      | YES  |     | NULL    |       |

表2

| BenchmarkName | varbinary(43) | YES  |     | NULL    |       |
| Value       | decimal(14,0) | YES  |     | NULL    |       |

我的问题是:如何将第一个表格动态转换为第二个表格?我相信答案在于一个支点,但我不确定。

1 个答案:

答案 0 :(得分:1)

我认为你想要取消忽略第一个表格。 UNPIVOTing从列中获取数据并将其转换为行。 MySQL没有unpivot,所以你必须使用UNION ALL查询:

select 'stream' BenchmarkName, stream value
from table1
union all
select 'pisec' BenchmarkName, pisec value
from table1
union all
select 'iozws' BenchmarkName, iozws value
from table1
union all
select 'iozwb' BenchmarkName, iozwb value
from table1
union all
select 'iozrs' BenchmarkName, iozrs value
from table1
union all
select 'iozrb' BenchmarkName, iozrb value
from table1