Mysql 解组表格、操作列并转换为行
我有一个Excel表格,可以转换为XML或CSV,用于处理此结构:Mysql 解组表格、操作列并转换为行,mysql,xml,excel,csv,Mysql,Xml,Excel,Csv,我有一个Excel表格,可以转换为XML或CSV,用于处理此结构: | License-plate | Parking | Fuel | Cleaning | --------------------------------------------- | 1111AAA | 234 | 21 | 1244 | | 2222AAA | 22 | 12 | 644 | | 3333BBB | 523 | 123
| License-plate | Parking | Fuel | Cleaning |
---------------------------------------------
| 1111AAA | 234 | 21 | 1244 |
| 2222AAA | 22 | 12 | 644 |
| 3333BBB | 523 | 123 | 123 |
这是每月每辆车的停车费、燃油费等支出
车牌是表中唯一的值
我需要在这里转换此表以将其导入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。让我们称之为源头 创建另一个具有所需最终结构的表,我们称之为destination 执行以下查询 需要考虑的事项: 根据您的示例,我声明License_Plate为主键。如果它在真实数据中重复,则可能不是这种情况。此外,如果同一车牌的源表中有多行,则可能需要调整my 3查询以聚合值。 此外,数据类型会根据样本数据进行调整,例如,如果值超过8位,则可能需要对其进行更改。 是上传CSV的一种方式。它有很多选择,你应该去看看。您还可以使用一些工具来完成,这样就不会编写该语句。 最后,选择这些表名作为示例,您应该找到更好的表名,它们代表您的问题域。
希望这对你有所帮助。@pnuts的评论对我有所帮助。这是一个非常简单的解决方案,可以在Excel中完成。谢谢大家!
解决方案是:你有这么多的专栏,你不能只是复制和粘贴吗?@Manufactor,是的,有很多专栏,我必须每月做一次。@pnuts谢谢!这很有帮助。这真是一个很好的解决方案。非常感谢你!谢谢你的建议。看起来应该有用,但可能是我做错了什么。我试图先只运行查询的一部分,但在第1行出现“get Column count”与“value count”不匹配的错误。@user3830159我已扩展我的答案,以包括表创建和上载CSV的可能方式。如果在尝试上载文件时发生此错误,请检查Excel是否在每行后面添加了逗号。MySQL可以将其解释为另一个不存在的字段。谢谢!我知道如何创建表,并且我已经插入了要手动测试的数据。我终于可以让它工作了。我想这是由于id字段引起的。我把它删掉了。它是有效的。非常感谢你!
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