我的数据库中的表格格式如下:
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为目标。
答案 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。
我之前从未尝试过这样做,所以我不确定它是否或如何起作用,但这是我从概念上开始的地方。