gpt4 book ai didi

sql - 选择每个人在其他表中的文档数

转载 作者:行者123 更新时间:2023-12-04 08:45:51 25 4
gpt4 key购买 nike

我有3张 table 。
客户、文件和客户文件。
第一个是客户端,每个客户端的信息都在这里。
第二个是文件,哪个文件可以进入系统。
第三个是ClientDocuments,哪个客户有哪个文件。
Tables Here
我必须选择从客户那里获取信息的位置,以及他们拥有的 3 种类型的文档的数量。
例如,客户 1 有一份名为“Contrato Social”的文档,2 份名为“Ata de Negociação”。
在 select 中必须返回每个客户,在 ContratoSocial 列中返回 1,Ata Negociacao 返回 2,Aceite de Condições Gerais 返回 0。
我这样做是为了展示。

select idFornecedor,
txtNomeResumido,
txtNomeCompleto,
--txtEmail,
--txtSenha,
bitHabilitado,
(SELECT Count(idDocumentosFornecedoresTitulo) FROM tbDocumentosFornecedores WHERE idDocumentosFornecedoresTitulo = 1) AS 'Contrato Social',
(SELECT Count(idDocumentosFornecedoresTitulo) FROM tbDocumentosFornecedores WHERE idDocumentosFornecedoresTitulo = 2) AS 'Ata de Negociação',
(SELECT Count(idDocumentosFornecedoresTitulo) FROM tbDocumentosFornecedores WHERE idDocumentosFornecedoresTitulo = 3) AS 'Aceite de Condições Gerais'
from dbo.tbFornecedores tbf
order by tbf.txtNomeResumido asc
返回这个:
Returns of the query
但它只是计算数据库中有多少该类型的文档,我想为每个客户端过滤,我该怎么办?
工作答案:
select tbf.idFornecedor, tbf.txtNomeResumido, tbf.txtNomeCompleto,
tbf.bitHabilitado,
sum(case when idDocumentosFornecedoresTitulo = 1 then 1 else 0 end) as contrato_social,
sum(case when idDocumentosFornecedoresTitulo = 2 then 1 else 0 end) as Ata_de_Negociação,
sum(case when idDocumentosFornecedoresTitulo = 3 then 1 else 0 end) as Aceite_de_Condições_Gerais
from dbo.tbFornecedores tbf left join
tbDocumentosFornecedores df
on tbf.idFornecedor = df.idFornecedor
group by tbf.idFornecedor, tbf.txtNomeResumido, tbf.txtNomeCompleto, tbf.bitHabilitado
order by tbf.txtNomeResumido asc

最佳答案

您需要某种方式来匹配 tbDocumentosFornecedores 中的行到 tbFornecedores 中的行.您的问题不清楚用于哪个列,但我可能会猜测类似 idDocumentosFornecedore 的内容。 .
您可以使用相关子句来修复您的查询。但是,我可能会建议使用条件聚合:

select tbf.idFornecedor, tbf.txtNomeResumido, tbf.txtNomeCompleto,
tbf.bitHabilitado,
sum(case when idDocumentosFornecedoresTitulo = 1 then 1 else 0 end) as contrato_social,
sum(case when idDocumentosFornecedoresTitulo = 2 then 1 else 0 end) as Ata_de_Negociação,
sum(case when idDocumentosFornecedoresTitulo = 3 then 1 else 0 end) as Aceite_de_Condições_Gerais
from dbo.tbFornecedores tbf left join
tbDocumentosFornecedores df
on tbf.idDocumentosFornecedore = df.idDocumentosFornecedore -- this is a guess
group by tbf.idFornecedor, tbf.txtNomeResumido, tbf.txtNomeCompleto, tbf.bitHabilitado
order by tbf.txtNomeResumido asc

关于sql - 选择每个人在其他表中的文档数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64334844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com