如何将行转置为列
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;
我有一个 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;