我有一个具有以下结构的 Excel 表格(可以转换为 XML 或 CSV 进行操作):
| License-plate | Parking | Fuel | Cleaning |
---------------------------------------------
| 1111AAA | 234 | 21 | 1244 |
| 2222AAA | 22 | 12 | 644 |
| 3333BBB | 523 | 123 | 123 |
这是每辆车/月每月的 parking 费、燃油费等支出。
车牌在表中具有唯一值(value)。
我需要转换此表以将其导入 MySQL,但我不知道如何执行此操作以及哪个工具适合它:
| License-plate | Concept | Amount |
-------------------------------------
| 1111AAA | Parking | 234 |
| 1111AAA | Fuel | 21 |
| 1111AAA | Cleaning | 1244 |
| 2222AAA | Parking | 22 |
| 2222AAA | Fuel | 12 |
| 2222AAA | Cleaning | 644 |
| ....... | ........ | ..... |
在结果表中,License-plate 不是唯一的值,它会重复其具有的概念数量。
UPD:刚刚发现它可以称为非规范化数据(也许不完全是)。
最佳答案
我会用 MySQL 来完成,方法如下:
将表(将其转换为 CSV 后)导入 MySQL。我们称之为源
CREATE TABLE source (
License_Plate char(7) primary key,
Parking int(8) unsigned,
Fuel int(8) unsigned,
Cleaning int(8) unsigned
);
LOAD DATA INFILE 'path/to/file' INTO TABLE source FIELDS TERMINATED BY ',';
创建另一个具有所需最终结构的表,我们将其称为目标
CREATE TABLE destination (
License_Plate char(7),
Concept varchar(10),
Amount int(8) unsigned
);
执行以下查询
INSERT INTO destination
SELECT License_Plate, 'Parking' as Concept, Parking as Amount
FROM source
INSERT INTO destination
SELECT License_Plate, 'Fuel' as Concept, Fuel as Amount
FROM source
INSERT INTO destination
SELECT License_Plate, 'Cleaning' as Concept, Cleaning as Amount
FROM source
需要考虑的事情:
- 我仅根据您的示例将 License_Plate 声明为主键。如果在实际数据中重复,情况可能并非如此。另外,如果源表中同一车牌有不止一行,您可能需要调整我的 3 个查询以聚合值。
- 此外,数据类型已根据示例数据进行调整,例如,如果您的值超过 8 位,您可能需要更改它。
- LOAD DATA是上传 CSV 的一种方式。它有很多选项,你应该检查一下。也可以用一些工具来做,这样就不用写那个语句了。
- 最后,选择这些表名作为示例,您应该想出更好的表名来代表您的问题域。
希望这对您有帮助。
关于mysql - 取消表格分组、操作列并转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070869/