"Pivoting" 键|值 table 使用大小写 returns 空白列... mySQL
"Pivoting" a key|value table using case returns blank columns... mySQL
我正在尝试将键|值格式的数据转换为每个条目一行。源数据库是 mysql,我知道我需要使用 Case 语句来转换,并且已经按照本网站上的一些示例来构造我的查询。
但是,我只取回一列数据,其余列为空白。
来源table格式
user_id
meta_key
meta_value
1
名字
约翰
1
key_2
等等
查询
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`
结果
user_id
key_1
key_2
key_3
key_4
等等
1
约翰
我可以清楚地看到问题是它正在获取它找到的第一个值并使用该行来填充整个 table...我不知道如何阻止它做这个。
因为这个枢轴的目的是转换数据以从一个安全数据库传输到另一个安全数据库(没有可用的集成),如果我可以避免的话,我真的不想把它作为一个临时步骤放到电子表格中它。
有人可以建议...吗?
请试试这个
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
我正在尝试将键|值格式的数据转换为每个条目一行。源数据库是 mysql,我知道我需要使用 Case 语句来转换,并且已经按照本网站上的一些示例来构造我的查询。
但是,我只取回一列数据,其余列为空白。
来源table格式
user_id | meta_key | meta_value |
---|---|---|
1 | 名字 | 约翰 |
1 | key_2 | 等等 |
查询
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`
结果
user_id | key_1 | key_2 | key_3 | key_4 | 等等 |
---|---|---|---|---|---|
1 | 约翰 |
我可以清楚地看到问题是它正在获取它找到的第一个值并使用该行来填充整个 table...我不知道如何阻止它做这个。
因为这个枢轴的目的是转换数据以从一个安全数据库传输到另一个安全数据库(没有可用的集成),如果我可以避免的话,我真的不想把它作为一个临时步骤放到电子表格中它。
有人可以建议...吗?
请试试这个
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