【问题标题】:how to create pivots to avoid ID duplicates?如何创建数据透视以避免 ID 重复?
【发布时间】:2016-01-06 15:18:55
【问题描述】:

我有下表('信息')

ID    |    value
1     |    A
1     |    B
2     |    A
3     |    A
3     |    B
3     |    C
4     |    A

如何使用查询来呈现下表?

ID   |   A   |   B   |   C   | 
1        X       x      null   
2        X      null    null
3        X       X       X
4        X      null    null

我有以下代码:

select id,  CASE WHEN value= 'A' THEN 'X'
   ELSE NULL END AS A,
CASE WHEN value= 'B' THEN 'X'
   ELSE NULL END AS B,
CASE WHEN value= 'C' THEN 'X'
   ELSE NULL END AS C
FROM information group by id;

但我也没有每个 ID 一行。

【问题讨论】:

  • 如果不制作一个非常丑陋的 3 路连接表,您就不能这样做。 case 只能查看当前记录的值,它只是一个单一的值。要获取其他类似记录的值,您需要子查询/联接。

标签: mysql sql select case


【解决方案1】:

你可以使用条件聚合

SELECT id, 
       MAX(CASE WHEN value= 'A' THEN 'X' END) AS A,
       MAX(CASE WHEN value= 'B' THEN 'X' END) AS B,
       MAX(CASE WHEN value= 'C' THEN 'X' END) AS C
FROM information 
GROUP BY id;

Demo here

【讨论】:

    【解决方案2】:

    你只需要聚合函数:

    select id, 
           MAX(CASE WHEN value = 'A' THEN 'X' END) AS A,
           MAX(CASE WHEN value = 'B' THEN 'X' END) AS B,
           MAX(CASE WHEN value = 'C' THEN 'X' END) AS C
    FROM information
    group by id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 2020-07-15
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      相关资源
      最近更新 更多