【发布时间】:2016-05-31 07:17:16
【问题描述】:
我得到了一个SQL表中的一些数据,需要按照一些规则进行转换。 但是,这种转换需要动态寻址列名,即应该存储值的列名本身作为值存储在其他列中,等等。 此外,根据值是否存在于不同列的范围内,应该为单个输入行生成多个输出行,所以我猜这是一种转置。
让我用一个例子来说明它:
id | targetColumnName | col1 | col2 | col3 | col4
-----------------------------------------------------
1 foo 5
2 foo 7 42
3 bar 3 6
4 foo 5
5 bar
6 bar 2 12
这应该产生以下内容:
id | foo | bar
--------------
1 5
2 7
2 42
3 3
3 6
4 5
6 2
6 12
换句话说,对于任何 colX 列中的每个当前值,在由 targetColumnName 列指定的列中生成具有该值的输出行。
这让我相信使用 SQL 根本不是一个好主意,至少不是通过创建一个简单的查询。可能可以创建一个复合语句/存储过程,但对我来说仍然是适合这项工作的错误工具。
我也有 csv 格式的数据,我觉得具有文本操作功能的强大脚本语言更适合这项工作,但我只接触了 Python 的皮毛,我不懂任何 Perl 和只有一点 awk 等。 我知道我可以在 Java 中实现它,但我仍然觉得这可以通过 Python 中的一个神奇的单线来完成。 :)
所以问题本质上是 1) 使用 SQL(ite) 执行此操作是否合理,以及 2) 还有什么其他工具会更好?
【问题讨论】:
-
这不是一个好问题。每个人都可以以不同的方式回答,我更喜欢存储过程的方法,其他人会编写一个 java 应用程序。对于这样的问题,你无法得到明确的答案。
-
我不是在要求 java 解决方案,我可以自己做。我意识到询问哪种语言做得最好可能会变得固执己见,但我不是简单地问“哪种语言最好”,而是问哪种语言具有适合这种类型的内置功能处理。
标签: python sqlite csv awk data-processing