如何将行转置为列

How do I transpose rows into columns

我有一个 table 交互数据,每个客户可以有多个交互。每个交互都位于 table 中的单独一行,并且有一个与特定交互类型相关的 interaction_code。

我想知道哪些唯一身份客户通过 phone、在线或两者进行了互动(phone interaction_code = 101、102 和 107,在线 interaction_code = 113, 152)

我使用 CASE 语句创建了新的列名称 'Phone' & 'Online' 并根据交互类型填充了 1 或 0。

但是,如果客户在 phone 和在线进行了交互,则有两个客户条目,一行在 Phone 列中带有“1”,另一行在“在线”列中带有“1”。 (如果客户进行了多次 phone 和在线互动,则可以有多个条目 - 但每次互动仍在不同的行中)

我希望看到每个客户一行,显示该客户是否进行了 phone 互动、在线互动或两者都进行了

这是我用过的代码:

  SELECT customer_id, 
    CASE
      WHEN interaction_code = 113 THEN 1
      WHEN interaction_code = 152 THEN 1
      ELSE 0
    END AS Online,
    CASE
      WHEN interaction_code = 101 THEN 1
      WHEN interaction_code = 102 THEN 1
      WHEN interaction_code = 107 THEN 1
      ELSE 0
    END AS Phone
   FROM interactions
    WHERE interaction_code = 113
      OR interaction_code = 152
      OR interaction_code = 101
      OR interaction_code = 102
      OR interaction_code = 107
    ORDER BY customer_id;

This is a sample of the data

This is an example of the results I am getting

This is an example of the desired output

根据 Jon Heller 在评论中所说的内容,您可以使用如下所示的查询来获得结果。

  SELECT customer_id,
         MAX (CASE WHEN interaction_code IN (113, 152) THEN 1 ELSE 0 END)          AS has_online,
         MAX (CASE WHEN interaction_code IN (101, 102, 107) THEN 1 ELSE 0 END)     AS has_phone
    FROM interactions
GROUP BY customer_id
ORDER BY customer_id;