【问题标题】:mysql trying to import an odd format csvmysql 试图导入一个奇怪的格式 csv
【发布时间】:2016-09-06 17:43:43
【问题描述】:

我有一个 Excel CSV 文件,客户在其中记录发票。为每个供应商创建了一个新列,并将金额放在每列下。

像这样:

ABC Company      Jacks Garage    XYZ Company
123.45            223.22          123.11
423.11             10.22           11.21

等等。我试图猜测如何将其放入两列(供应商,金额),以便我可以将该数据导入实际表中。大约有 200 家供应商,因此手动剪切和粘贴将永远持续下去。

我可以以某种方式使用循环执行此操作并将信息插入到 2 列表中吗?

【问题讨论】:

    标签: mysql excel csv


    【解决方案1】:

    我会通过编写一个用几乎任何语言编写的简单脚本来做到这一点,例如Python、PHP、Ruby,甚至 Perl。这些语言中的任何一种都可以轻松读取文本文件,将字段拆分为数组,并以您想要的任何方式将字段发布到数据库中。

    或者,您可以在不编写代码的情况下执行此操作,但步骤如下:

    1. 将 CSV 文件按原样加载到表中。

      create table invoices_asis (
        rownum serial primary key,
        abc_company_amount numeric(9,2),
        jacks_garage_amount numeric(9,2),
        xyz_company_amount numeric(9,2)
      );
      
      load data infile 'invoices.csv' into table invoices_asis ignore 1 lines
      (abc_company_amount, jacks_garage_amount, xyz_company_amount);
      
    2. 然后将每个给定供应商的所有数据复制到您的(供应商,金额)表中。

      create table invoices (
        invoice_id serial primary key,
        vendor varchar(20),
        amount numeric(9,2)
      );
      
      insert into invoices (vendor, amount)
      select 'ABC Company', abc_company_amount from invoices_asis;
      
      insert into invoices (vendor, amount)
      select 'Jacks Garage', jacks_garage_amount from invoices_asis;
      
      insert into invoices (vendor, amount)
      select 'XYZ Company', xyz_commpany_amount from invoices_asis;
      
    3. 最后,删除原样表。

      drop table invoices_asis;
      

    【讨论】:

    • 感谢所有伟大的想法。我最终编写了一个 VB 脚本来在 excel 中修复它。他们使用它来导入 mySql。再次感谢!
    【解决方案2】:

    我认为你想要的是'unpivot',有很多选项(eg for Excel)。

    在最左侧插入一个空白列,然后在示例中将其与您的数据一起包含在 4. 中。在 6. 将 Column 移到 Row 上方的 ROWS 中。双击总计并删除左侧列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2021-10-21
      • 2019-07-21
      • 2020-07-06
      • 2017-11-25
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多