【问题标题】:Merge non empty values from a table to one result row将表中的非空值合并到一个结果行
【发布时间】:2015-07-18 16:44:17
【问题描述】:

我有一个 MYSQL 表,它有大约 350 列。有大多数“空”值,我需要将多行合并为一个并将“空”值替换为非空值。我的桌子是这样的:

id|col1|col2|col3|cola|col_b|...|col350
1 |12  |4   |3   |-77 |-77  |...|-77 
2 |12  |-77 |-77 |2   |-77  |...|-77 
3 |12  |-77 |-77 |-77 |6    |...|-77 
4 |12  |-77 |-77 |-77 |-77  |...|6
5 |13  |3   |-77 |-77 |-77  |...|-77 
6 |13  |-77 |5   |-77 |-77  |...|-77
...

-77 是空值的替代品。在col1 中是属于一起的数据集的ID。

我需要一个选择查询来将非“空”值合并到每个 col1-id 的一个结果行。 col1-id 12 应该是这样的:

1 | 12 | 4 | 3 | 2 | 6 | ... | 6

有人知道怎么做吗?

【问题讨论】:

  • 一张表有350列,而且都是这样的?您确实需要规范化架构。
  • 这是从 3rd 方软件导入的 csv。

标签: mysql select merge group-by


【解决方案1】:
SELECT col1, 
       MAX(CASE WHEN col2 <> -77 THEN col2 END) AS col2,
       MAX(CASE WHEN col3 <> -77 THEN col3 END) AS col3,
       MAX(CASE WHEN cola <> -77 THEN cola END) AS cola,
       MAX(CASE WHEN col_b <> -77 THEN col_b END) AS col_b,
       ... and so on
       MAX(CASE WHEN col350 <> -77 THEN col350 END) AS col350
FROM YourTable
GROUP BY col1

【讨论】:

  • 行不通,因为列名不是数字。例如:没有col4,而是cola。
  • 只要使用实际的列名即可。我以为这些只是例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
相关资源
最近更新 更多