如何在 MySql 中调整 table?
How to pivot table in MySql?
我有一个 table 插图显示在随附的屏幕上:
并呈现数据:
如您所见,它包含行中的所有字段(值,column_id - 是字段类型)。每个字段有 line_index
和 column_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
语句,因此最好先获取它,然后使用某种编程语言构建最终查询。
我有一个 table 插图显示在随附的屏幕上:
并呈现数据:
如您所见,它包含行中的所有字段(值,column_id - 是字段类型)。每个字段有 line_index
和 column_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
语句,因此最好先获取它,然后使用某种编程语言构建最终查询。