如何在 MySql 中调整 table?

How to pivot table in MySql?

我有一个 table 插图显示在随附的屏幕上:

并呈现数据:

如您所见,它包含行中的所有字段(值,column_id - 是字段类型)。每个字段有 line_indexcolumn_index 的位置和 column_id.

我想取回所有字段名称如下的所有行:

line_index column_id_1  column_name1 column_id_2   column_name2   column_id_3   column_name3  
0          1             Age           2            Vasile         3              NY

更简单地说,我需要将所有字段(行)构建为列,然后再返回行。

我应该使用 Pivot 吗?在 MySQL 中是否可行?

Link 到 sqlfiddle

您需要按 line_index 对结果进行分组,并有条件地将行转换为列。

SELECT l.line_index, 
MAX(CASE WHEN ct.column_name = "NAME" THEN l.value ELSE NULL END) AS "NAME" ,
MAX(CASE WHEN ct.column_name = "AGE" THEN l.value ELSE NULL END) AS "AGE" ,
MAX(CASE WHEN ct.column_name = "ZUP" THEN l.value ELSE NULL END) AS "ZUP" 
FROM columns_types ct 
LEFT JOIN `lines` l ON l.column_id = ct.column_id
GROUP BY l.line_index;

Try it here。我还对您的模式做了一些更改,我认为这些更改不会影响存储在 table 中的数据。您在 columns_types table 中添加了冗余行(可能)。通过查看查询,您知道必须为每一列构建一个 MAX(CASE 语句,因此最好先获取它,然后使用某种编程语言构建最终查询。