mysql试图导入一个奇怪的格式csv

时间:2016-09-06 17:43:44

标签: mysql excel csv

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

像这样:

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

等。我试图猜测如何将其分为两列(供应商,金额),以便我可以将该数据导入实际表中。大约有200家供应商这样做,手动剪切和粘贴将永远工作。

我能以某种方式循环并将信息插入2列表吗?

2 个答案:

答案 0 :(得分: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;
    

答案 1 :(得分:0)

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

在最左侧插入一个空白列,然后在示例中将数据包含在4.处。在6.将Column移动到Row上方的ROWS。双击Grand Total并删除左侧列。