简而言之,我希望创建一份报告,在下方(行)显示客户列表,在顶部(列)显示我们的服务。在每个单元格中,都会有一个数字,代表一种“对话类型”。这个想法是让我们的销售人员能够看到——如果客户知道我们提供的特定服务,他们是否接受它,他们是否尝试过但讨厌它,等等(这些是对话类型).这是为了避免一遍又一遍地用相同的信息轰炸客户。从本质上讲,它是销售团队可以用来在内部保持一致的工具。
这是我的表格:
服务(ID、服务名称、描述) 客户(id,client_name) 对话(id、client_id、service_id、conversation_type_id) conversation_type (id, description)
到目前为止,这是我的查询:
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 |
-----------------------------------------------
我猜是分组的问题,但是我试了各种办法,好像都不尽如人意。有任何想法吗?真的,有更好的方法吗?真的很感激任何见解。谢谢。
最佳答案
您可以像 Strawberry 所说的那样,为每个案例放置 Max(case ...)。或者您可以通过将每个案例放入查询中然后加入它们来实现,就像这样(第一个肯定更好):
SELECT Z.Company, A,B,C,D
FROM
(SELECT
company,
CASE WHEN service_name= 'A' THEN conversation_type_id END AS 'A'
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) Z,
(SELECT
company,
CASE WHEN service_name= 'B' THEN conversation_type_id END AS 'B'
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) Y,
(SELECT
company,
CASE WHEN service_name= 'C' THEN conversation_type_id END AS 'C'
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) X,
(SELECT
company,
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) W
WHERE Z.company=Y.company
AND Z.company=X.company
AND Z.company=W.company
关于mysql - 在 MySQL 中创建涉及三个表的报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105520/