【发布时间】:2021-10-15 17:21:08
【问题描述】:
我正在尝试将键|值格式的数据转换为每个条目一行。源数据库是 mysql,我知道我需要使用 Case 语句才能进行数据透视,并按照此站点上的一些示例来构建我的查询。
但是,我只返回一列数据,其余列中有空格。
源表格式
| user_id | meta_key | meta_value |
|---|---|---|
| 1 | first name | John |
| 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`
结果
| user_id | key_1 | key_2 | key_3 | key_4 | etc |
|---|---|---|---|---|---|
| 1 | John |
我可以清楚地看到问题在于它使用它找到的第一个值并使用该行来填充整个表格....我不知道如何阻止它这样做。
因为此数据透视的目的是将数据转换为从一个安全数据库传输到另一个安全数据库(没有可用的集成),如果可以避免的话,我真的不想将它作为临时步骤放入电子表格中。
有人可以建议...吗?
【问题讨论】:
-
您与 MySQL 的 nonstandard GROUP BY handling 发生冲突。并且,在 Markdown 表之前放置一个空行以使其正确呈现。
-
@O.Jones 谢谢 - 我在 mySQL 中工作不多。今晚睡前阅读。
标签: mysql group-by pivot key-value