簡體   English   中英

MySQL將多列拆分成多行

[英]MySQL split up multiple columns into multiple rows

我有一個客戶提供的數據集,如下所示:(簡化)

|ForiegnKey|Code1|Code2|Code3|  
|==========|=====|=====|=====|  
|A         |10   |20   |30   |  
|A         |10   |20   |30   |  
|B         |100  |200  |     |  
|C         |25   |35   |40   |  
|D         |1000 |     |     | 
|E         |     |     |9999 |

對於最終產品,我需要一次在新表中輸入1個代碼,如下所示:

|ForiegnKey|Sequence|Code|
|A         |1       |10  |
|A         |2       |20  |
|A         |3       |30  |
|B         |1       |100 |
|C         |1       |25  |
|C         |2       |35  |
|C         |3       |40  |
|D         |1       |1000|
|E         |1       |9999|

對於我的問題,是否有一種簡單的方法可以在不涉及使用聯合的查詢中執行此操作?
我必須根據ForiegnKey的值生成序列號(即在ForiegnKey E的情況下,即使它在列Code3中,我需要它的序列為1.)我當前的思路是如果我可以在不使用Union的情況下將其從表中取出,我可以在同一語句中生成序列ID。
應跳過空代碼值,例如D-2和3以及E-1和2。
我已經開始使用臨時表來處理這個問題,但我想我會在這里查看是否有更簡單的方法。

謝謝

你聽起來更有興趣在一個批次中獲得結果,而不是避免使用UNIONS。 干得好:

set @last_key = null;
set @seq = 1;
select foreignkey, case when @last_key is null or @last_key != foreignkey then @seq := 1 else @seq := @seq + 1 end as sequence, code, @last_key := foreignkey as foo  from (
  select foreignkey, code1 as code
  from dataset
  where code1 is not null
  union
  select foreignkey, code2
  from dataset
  where code2 is not null
  union
  select foreignkey, code3
  from dataset
  where code3 is not null
  order by 1
) foo;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM