如何解决Access 或 Mysql - 表行作为查询中的列
我有这三个表:
“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 举报,一经查实,本站将立刻删除。