mysql - 取消表格分组、操作列并转换为行

标签 mysql xml excel csv

我有一个具有以下结构的 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

需要考虑的事情:

  1. 我仅根据您的示例将 License_Plate 声明为主键。如果在实际数据中重复,情况可能并非如此。另外,如果源表中同一车牌有不止一行,您可能需要调整我的 3 个查询以聚合值。
  2. 此外,数据类型已根据示例数据进行调整,例如,如果您的值超过 8 位,您可能需要更改它。
  3. LOAD DATA是上传 CSV 的一种方式。它有很多选项,你应该检查一下。也可以用一些工具来做,这样就不用写那个语句了。
  4. 最后,选择这些表名作为示例,您应该想出更好的表名来代表您的问题域。

希望这对您有帮助。

关于mysql - 取消表格分组、操作列并转换为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070869/

相关文章:

excel - VBA Dir 在名为 ".."或 Documents.xlsx 的目录中提取 Ghost 文件

php - MySQL 事务 - 更新 2 个表

php - mysql LIKE 双百分比

php - 数组返回少 1 行 - PHP

c# - 合并相似的xml文档

java - 简单 XML - 如何从内部元素开始获取数据?

java - 如何以 cidr 表示法搜索 IP 地址

android - 访问测试应用程序 Assets

java - 使用 Apache POI 3.14 获取 Excel 中公式的计算值

excel - 定位图表