Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用SQL进行数据转换_Sql_Mysql - Fatal编程技术网

用SQL进行数据转换

用SQL进行数据转换,sql,mysql,Sql,Mysql,我的数据库中有一个如下格式的表: customer old_code new_code C1 A X C1 B Y C2 C Y C2 D Z C1 C2 X A Y B C Z D 因此,这对密钥customer和旧的\u代码映射到一个新的\u代码。这是一种很好的存储数据

我的数据库中有一个如下格式的表:

customer   old_code   new_code
C1         A          X
C1         B          Y        
C2         C          Y
C2         D          Z
      C1    C2
X     A
Y     B     C
Z           D
因此,这对密钥customer和旧的\u代码映射到一个新的\u代码。这是一种很好的存储数据的方法,查找速度非常快,但对于人来说,数据最好显示如下:

customer   old_code   new_code
C1         A          X
C1         B          Y        
C2         C          Y
C2         D          Z
      C1    C2
X     A
Y     B     C
Z           D

有没有一种简单的方法可以使用SQL将数据转换为第二个视图?很明显,可以有任意数量的客户,尽管我可以事先查询唯一的客户集。目前我有<50000条记录,我希望这是正常的,但如果可能的话,我希望任何解决方案都能扩大到几十万条。我的应用程序目前以MySQL为目标。

您可以使用一些OLAP技术来实现这一点。如果您的表不是很大,您可以将数据导出到Excel,并使用透视表在刚才提到的布局中重新排列数据


还有一个开源工具,名为,可能会有所帮助。在Java上运行。

我认为您可能必须从一个选择不同的新代码中调用一个过程。。。。该过程将使用带有子查询的INSERT语句,如C1=SELECT old_code FROM firsttable,其中customer='C1'和new_code=code,其中code是作为SELECT DISTINCT参数传入的新_代码


我以前从未尝试过这种方法,所以我不确定它是否会工作,或者如何工作,但这是我从概念上开始的地方。

一种标准方法是:

SELECT CC.NEW_CODE,
       MAX(CASE CUSTOMER WHEN 'C1' THEN OLD_CODE ELSE NULL END) C1,
       MAX(CASE CUSTOMER WHEN 'C2' THEN OLD_CODE ELSE NULL END) C2
FROM CUSTOMER_CODE CC
GROUP BY CC.NEW_CODE
ORDER BY CC.NEW_CODE

当然,这取决于一些假设,您将获得有关列唯一性的更多信息。我在Oracle中测试了这一点,通常在Oracle中进行解码;我认为这个案例应该适合您。

谢谢,我基本上熟悉OLAP的想法,尤其是Mondrian Pentaho使用的OLAP引擎,但我忍不住觉得这个问题太严重了。我想将输出格式化为HTML,这样Excel至少在一开始就可以输出了。讽刺的是,我所看到的输出格式实际上是作为输入的电子表格的格式!