使用SQL进行数据转换

wob*_*ogs 6 mysql sql

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

customer   old_code   new_code
C1         A          X
C1         B          Y        
C2         C          Y
C2         D          Z
Run Code Online (Sandbox Code Playgroud)

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

      C1    C2
X     A
Y     B     C
Z           D
Run Code Online (Sandbox Code Playgroud)

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

orb*_*ish 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
Run Code Online (Sandbox Code Playgroud)

当然,这取决于一些假设,并且您将获得有关列的唯一性的更多信息。我在 Oracle 中对此进行了测试,您通常会在 Oracle 中进行 DECODE;我认为 CASE 应该适合你。