本文介紹了使用CASE的鍵|值表旋轉&Q;將返回空列…MySQL的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在嘗試將鍵|值格式的數據轉換為每個條目一行。源數據庫是MySQL,我知道我需要使用CASE語句才能透視,并在此站點上遵循了一些示例來構造我的查詢。
但是,我只能取回一列數據,其余列中有空格。
源表格式
用戶ID | 元密鑰 | Meta_Value |
---|---|---|
1 | 名字 | 約翰 |
1 | Key_2 | ETC |
查詢
SELECT `user_id`,
case when `meta_key`='key_1' then `meta_value` else '' end as `key_1`,
case when `meta_key`='key_2' then `meta_value` else '' end as `key_2`,
case when `meta_key`='key_3' then `meta_value` else '' end as `key_3`,
case when `meta_key`='key_4' then `meta_value` else '' end as `key_4`,
case when `meta_key`='key_5' then `meta_value` else '' end as `key_5`,
case when `meta_key`='key_6' then `meta_value` else '' end as `key_6`,
case when `meta_key`='key_7' then `meta_value` else '' end as `key_7`
from
(select `user_id`, `meta_key`, `meta_value`
from `source_table`
where `user_id`='1'
and `meta_key` in
('key_1','key_2','key_3','key_4','key_5','key_6','key_7')) x
group by `user_id`
結果
用戶ID | Key_1 | Key_2 | Key_3 | Key_4 | 等 |
---|---|---|---|---|---|
1 | 約翰 |
我可以清楚地看到問題在于它采用了它找到的第一個值,并使用該行填充整個表。我不知道的是如何阻止它這樣做。
因為此透視的目的是將數據從一個安全數據庫轉換到另一個安全數據庫(沒有可用的集成),所以如果可以避免的話,我真的不想將其作為臨時步驟放到電子表格中。
誰能建議…?
推薦答案
請嘗試
SELECT `user_id`,
MAX(case when `meta_key`='key_1' then `meta_value` else '' end) as `key_1`,
MAX(case when `meta_key`='key_2' then `meta_value` else '' end) as `key_2`,
MAX(case when `meta_key`='key_3' then `meta_value` else '' end) as `key_3`,
MAX(case when `meta_key`='key_4' then `meta_value` else '' end) as `key_4`,
MAX(case when `meta_key`='key_5' then `meta_value` else '' end) as `key_5`,
MAX(case when `meta_key`='key_6' then `meta_value` else '' end) as `key_6`,
MAX(case when `meta_key`='key_7' then `meta_value` else '' end) as `key_7`
from
(select `user_id`, `meta_key`, `meta_value` from `source_table`
where `user_id`='1' and `meta_key` in ('key_1','key_2','key_3','key_4','key_5','key_6','key_7')) x
group by `user_id
這篇關于使用CASE的鍵|值表旋轉&Q;將返回空列…MySQL的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,