使用SQL进行数据转换

时间:2010-08-25 11:18:17

标签: sql mysql

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

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

因此,对键customer和old_code映射到new_code。这是一种很好的存储数据的方式,查找非常快,但对于人类消费,数据会更好地显示如下:

      C1    C2
X     A
Y     B     C
Z           D

使用SQL将数据转换为第二个视图有一种简单的方法吗?显然可以有任意数量的客户,虽然我可以事先查询独特的设置。目前我有< 50000条记录,我希望这是常态,但我希望任何可能的解决方案扩展到几十万。我的应用程序目前以MySQL为目标。

3 个答案:

答案 0 :(得分:1)

一种标准方式是:

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中测试了这个,你通常在做DECODE;我认为CASE应该适合你。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我认为您可能需要在PROCEDURE内拨打SELECT DISTINCT new_code...。该过程将INSERT语句与C1=(SELECT old_code FROM firsttable WHERE customer='C1' AND new_code=code)等子查询一起使用,其中code是作为SELECT DISTINCT的参数传入的new_code。

我之前从未尝试过这样做,所以我不确定它是否或如何起作用,但这是我从概念上开始的地方。