根据另一列获取值作为单独的列

时间:2014-09-11 11:33:31

标签: mysql

我的数据如下:

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的东西,但我不确定如何构建它。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  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

由于NULL以递减顺序排在最后,CASE返回NULL表示没有条件匹配,MAX会为每列提供正确的属性。< / p>