我在附图的屏幕上画了一张桌子:

并提供了以下数据:

如您所见,它包含行中的所有字段(value,column_id - is字段类型)。每个字段都有位置的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中使用?
链接到木琴
发布于 2022-05-19 05:43:42
您需要按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;在这里试试。此外,我在您的模式中做了一些更改,我认为这些更改不会影响存储在表中的数据。您正在columns_types表中添加冗余行(可能)。通过查看查询,您知道必须为每个列构建一个MAX(CASE语句,所以最好先获取它,然后用某种编程语言构建最终的查询。
https://stackoverflow.com/questions/72296957
复制相似问题