微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Access 或 Mysql - 表行作为查询中的列

如何解决Access 或 Mysql - 表行作为查询中的列

我有这三个表:

enter image description here

“Clienti”表包含客户。 “Corsi”表包含所有可用的课程 “corsi Fatti”表包含每位客户参加的所有课程。

我需要的是一个查询,返回每个客户,以及他在什么日期参加的课程。 为此,我想要例如一个带有这些列的表:

Clienti.Nome、corsi.row1.corso、corsi.row2.corso、corsi.row3.corso、corsi.rowN.corso。

表的内容应该是: 如果存在,corsi 表中匹配课程的 clienti.Nome,corsifatti.data。

因此,第一列是客户名称,然后“corsi”表的每一行都有一列,如果客户参与了该课程,则 corsifatti.data 应在该列中。>

这样的事情可以用 Access 或 MysqL 查询来完成吗?我尝试过内部连接,但结果不是我需要的。

select
  Clienti.nome,Clienti.Addresse,Clienti.CAP,Clienti.Tel,Clienti.Ansprechpartner,Clienti.Mail,Clienti.Weiteres,CorsiFatti.Data,Corsi.Corso,Corsi.Durata 
from Clienti 
INNER JOIN CorsiFatti on CorsiFatti.[ID Cliente] = Clienti.ID 
INNER JOIN Corsi on Corsi.ID = CorsiFatti.[ID Corso]

解决方法

您要问的是一个简单的内连接:

select Clienti.nome,Clienti.Addresse,Clienti.CAP,Clienti.Tel,Clienti.Ansprechpartner,Clienti.Mail,Clienti.Weiteres,CorsiFatti.Data,Corsi.Corso,Corsi.Durata 
from Clienti 
INNER JOIN CorsiFatti on CorsiFatti.[ID Cliente] = Clienti.ID 
INNER JOIN Corsi on Corsi.ID = CorsiFatti.[ID Corso]
order by Clienti.nome,Corsi.Corso;

我认为你的意思是你的只是缺少顺序。 我不建议使用访问权限,但如果它无论如何都是访问权限,那么您需要在所有这些连接周围加上括号(我知道很特别,但它是访问权限)。

,

具有可变列数的数据透视表很复杂。我可以建议最简单的解决方案使用 JSON 聚合:

SELECT 
  ClienteId,Name,JSON_ARRAYAGG(
    JSON_OBJECT("Data",Data,"Corso",Corso)
  ) Corsi 
FROM 
  CorsiFatti 
  JOIN Corsi ON Corsi.Id = CorsiFatti.CorsoId 
  JOIN Clienti ON Clienti.Id = CorsiFatti.clienteId 
GROUP BY 
  ClienteId,Name
;

结果是每个客户的行,包含客户在他的课程中的数据作为 JSON 字符串:

+===========+=========+========================================================================================+
| ClienteId | Name    | Corsi                                                                                  |
+===========+=========+========================================================================================+
| 1         | Mr. Fix | [{"Data": "2021-01-01","Corso": "Corso1"},{"Data": "2021-02-01","Corso": "Corso3"}] |
+-----------+---------+----------------------------------------------------------------------------------------+

在这里你可以找到SQL fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。