【问题标题】:"Pivoting" a key|value table using case returns blank columns... mySQL使用大小写“透视”键|值表返回空白列... mySQL
【发布时间】: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


【解决方案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

【讨论】:

  • 嗨@smallnorthumbrianvillage,如果我的回答对您有帮助,请标记为已接受且有用。
  • 谢谢@smallnorthumbrianvillage。请标记为已接受,以便任何人确保这是您想要的确切答案。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 2020-04-07
  • 2018-04-20
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多