我的数据看起来像:

col1    col2    attr    val
ABC     123      A      10
ABC     123      B      18
XYZ     123      A      5
XYZ     123      B      11
ABC     888      A      24
ABC     888      B      13
XYZ     888      A      25
.
.
.

基本上存在COL1、COL2的各种组合,并且对应于与它们相关联的每个attr,它们有一个单独的记录用于val
我需要以下形式的输出:
col1    col2   A_val    B_val
ABC     123     10       18
XYZ     123     5        11

(对于col1 col2的每个唯一组合)
这种查询对我来说是个新领域,所以我不知道从哪里开始。它可能涉及到类似于CASE WHEN attr='A' THEN val END as A_val的内容,但我不确定如何构造它。

最佳答案

你可以这样做:

  SELECT col1,
         col2,
         MAX(CASE WHEN attr='A' THEN val END) A_val,
         MAX(CASE WHEN attr='B' THEN val END) B_val
    FROM table_name
GROUP BY col1,
         col2

由于NULLs以降序排列在最后,如果没有匹配的条件,CASE将返回NULL,因此MAX将为每个列提供正确的属性。

关于mysql - 根据另一列获取值作为单独的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25786353/

10-16 04:44