【发布时间】:2016-05-08 22:29:18
【问题描述】:
简而言之,我希望创建一个报告,在下方(行)显示客户列表,在顶部(列)显示我们的服务。在每个单元格中,都会有一个数字,代表“对话类型”。这个想法是让我们的销售人员能够看到——如果客户知道我们提供的特定服务,他们是否接受它,他们是否尝试过并且讨厌它,等等(这些是对话类型)。这是为了避免一遍又一遍地用相同的信息轰炸客户。从本质上讲,它是销售团队可以用来在内部保持一致的工具。
这是我的桌子:
服务(id、service_name、描述) 客户(id,client_name) 对话(id、client_id、service_id、conversation_type_id) 对话类型(id,描述)
到目前为止,这是我的查询:
SELECT
company,
CASE WHEN service_name= 'A' THEN conversation_type_id END AS 'A',
CASE WHEN service_name= 'B' THEN conversation_type_id END AS 'B',
CASE WHEN service_name= 'C' THEN conversation_type_id END AS 'C',
CASE WHEN service_name= 'D' THEN conversation_type_id END AS 'D'
FROM
services srv
INNER JOIN
conversations con ON srv.id=con.service_id
INNER JOIN company cmp ON con.client_id=cmp.id
INNER JOIN conversation_type typ ON con.conversation_type_id=typ.id
GROUP BY company;
看起来很接近,但不是打印
----------------------------------------------
| | A | B | C | D |
|client 1 | 1 | 2 | 1 | 5 |
|client 2 | 3 | 2 | 3 | 4 |
|client 3 | 1 | 5 | 1 | 1 |
-----------------------------------------------
它改为打印
----------------------------------------------
| | A | B | C | D |
|client 1 | 1 | | | |
|client 1 | | 2 | | |
|client 1 | | | 1 | |
|client 1 | | | | 5 |
-----------------------------------------------
我想这是一个分组问题,但我尝试了各种方法,但似乎并不令人满意。有任何想法吗?真的,有没有更好的方法来做到这一点?真的很感激任何见解。谢谢。
【问题讨论】:
-
那将是(例如)MAX(CASE WHEN...END) 'A' 等。至于更好的方法,是的。数据显示问题通常最好在表示层/应用程序级代码中处理,假设它是可用的(例如,在格式良好的数组上的简单 PHP 循环)
-
如果您可以在 FROM 表中显示实际数据的示例会有所帮助
-
谢谢草莓!我不明白为什么这有效,但它有效!你能推荐一篇我能读到的关于 MAX(CASE WHEN...END) 的文章吗?我真的需要更好地理解如何构建报告和使用聚合函数,在这一点上我是一个新手。你似乎知道你在说什么,所以任何推荐的阅读我都会非常感激!
标签: mysql sql aggregate reporting