0

我已经搜索了很多答案,但决定向 Stackoverflow 的大人物提问。

如何获取单行数据、10 列并使其如下所示:

0000-00-00 00:00:00 0000-00-00 00:00:00 1   3343    1   en-GB   1           15 South Peak LP    1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 35  3343    1   en-GB   1           853 Del Valle Dr    1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 3   3343    1   en-GB   1           Fallbrook   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 39  3343    1   en-GB   1           CA  1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 2   3343    1   en-GB   1           92028   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 48  3343    1   en-GB   1           San Diego   1   0       
0000-00-00 00:00:00 0000-00-00 00:00:00 5   3343    1   en-GB   1           7607231133  1   0       

现在是 1 行数据的 7 行。第三列代表数据的字段项目编号。第四列是特定条目的 ID 号。

原始数据行如下所示:

3343    1   68  15 South Peak LP    853 Del Valle Dr    Fallbrook   CA  92028   San Diego   7607231133

取行并执行“转置”不会执行上述操作。它只是将数据旋转 90 度。我需要获取数据并创建 7 行,每行都有单独的数据。

如果我能找到一个公式将“原始”行列 D、E、F、G、H、I、J 中的数据放入各自的行中,那么我可以使用其他简单的公式移动剩余的数据。

为了使这更复杂,我正在使用的文件是 550,000 行。这意味着将单行变为 7 行将使文件接近 400 万行……显然我必须减小文件大小。

有人知道 OpenOffice Calc 中的公式来生成上述内容吗?或者...是否有人知道使用 OSD 550,000 行文件将数据行导入 MySQL 数据库的方法,该文件被安排为 7 行示例的表?

我可以将 OSD 导入其他表。但是这张桌子让我很困惑。必须有一种方法可以将单行数据放入数据库表中。

这是数据库中表的示例:

(`publishUp`, `publishDown`, `fid`, `sid`, `section`, `lang`, `enabled`, `params`, `options`, `baseData`, `approved`, `confirmed`, `createdTime`, `createdBy`, `createdIP`, `updatedTime`, `updatedBy`, `updatedIP`, `copy`, `editLimit`) VALUES
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 35, 2348, 1, 'en-GB', 1, '', '', '133 4Th St', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 3, 2348, 1, 'en-GB', 1, '', '', 'Gonzales', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 39, 2348, 1, 'en-GB', 1, '', '', '', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 2, 2348, 1, 'en-GB', 1, '', '', '93926', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),
('0000-00-00 00:00:00', '0000-00-00 00:00:00', 5, 2348, 1, 'en-GB', 1, '', '', '877-616 6144', 1, 0, '2013-02-23 02:22:00', 854, '76.28.168.75', '2013-02-23 02:51:45', 854, '76.28.168.75', 0, 1),

我希望这一切都有意义,并且有人可以真正解决这个问题。谢谢大家。

4

2 回答 2

0

为了管理所有 Extract Transform Load 过程,我发现了有用的 Pentaho 数据集成应用程序工具。它基于Java和开源。您可以简单地创建转换,选择文件或数据库输入,然后对拆分字段使用转换步骤,然后使用数据库输出到您的 MySQL 数据库。

于 2013-04-23T07:34:47.293 回答
0

要使用 SQL 扁平化这种结构,您可以轻松地执行类似的操作

select field1.sid, field1.enabled, field1.baseData, field35.baseData /* other fields...*/    

from
  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=1) field1

inner join  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=35) field35 on field35.sid = field1.sid

inner join  (select sid, section, lang, enabled, params, options, baseData, approved, confirmed, createdTime, createdBy, createdIP, updatedTime, updatedBy, updatedIP, copy, editLimit from thetable where fid=3) field3 on field3.sid = field1.sid

-- and so on for each field

1)字段 fid=1 必须始终存在 2)您需要在编写查询之前知道字段 id,看起来就像您所做的那样 3)如果没有其他字段,您可以外连接后续字段以返回“父”行记录存在

这些帮助有用?

于 2013-04-23T09:22:30.830 回答