我的数据库中的表格格式如下:
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.
一种标准方法是:
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 应该适合你。