Junção Left outer join e count

SQL

Análise de dados

17/01/2023

Bom dia!

Tenho estas duas Querys:

select IArv_CodPN,sum(iarv_qtde)as QtdeComp from ItemArvore
where IArv_CodPN =''552600283301''
group by IArv_CodPN
order by IArv_CodPN

select distinct pla_codpn,Cen_Descricao,Cen_PNdoCliente, Pla_CodCelula from Placas
left outer join AcbCentr on cen_codpn = Pla_CodPN
where pla_codpn in(select distinct pla_codpn from AcbPlacas
where Pla_CodPNInicial =''552600283301'')
order by Pla_CodPN

Como sou novo em SQL não sei se pode fazer a junção, eu tentei e deu um erro, como mostra abaixo e não sei como resolver.

select distinct pla_codpn,Cen_Descricao,Cen_PNdoCliente, Pla_CodCelulaSMD, sum(iarv_qtde)as QtdeComp from Placas
left outer join AcbCentr on cen_codpn = Pla_CodPN
left outer join AcbItemArvore on IArv_CodPN = Pla_CodPNInicial
where pla_codpn in(select distinct pla_codpn from AcbPlacas
where Pla_CodPNInicial =''552600283301'')
order by Pla_CodPNInicial

erro:
Msg 8120, Level 16, State 1, Line 12
Column ''AcbPlacas.Pla_CodPN'' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Msg 145, Level 15, State 1, Line 12
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Vagner

Vagner

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

17/01/2023

quando usadas as funções de agregação (sum, count, avg, max. min, etc...) use GROUP BY em vez de usar DISTINCT
na primeira parte você cita as tabelas ItemArvore, Placas e AcbPlacas.
Na segunda parte não tem mais a tabela ItemArvore; agora é AcbItemArvore.
Tentei adivinhar algumas coisas e saiu a instrução abaixo:
select
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD,
	sum(aia.iarv_qtde) as QtdeComp
from
	Placas pl -- aqui é Placas mesmo ?
left outer join
	AcbCentr acen
	on acen.cen_codpn = pl.Pla_CodPN
left outer join
	AcbItemArvore aia
	on aia.IArv_CodPN = pl.Pla_CodPNInicial
where
	pl.pla_codpn in	(
						select distinct pla_codpn
						from AcbPlacas -- aqui é AcbPlacas mesmo ?
						where Pla_CodPNInicial = '552600283301'
					)
group by
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD
order by
	Pla_CodPNInicial

GOSTEI 1

Mais Respostas

Vagner

Vagner

17/01/2023

quando usadas as funções de agregação (sum, count, avg, max. min, etc...) use GROUP BY em vez de usar DISTINCT
na primeira parte você cita as tabelas ItemArvore, Placas e AcbPlacas.
Na segunda parte não tem mais a tabela ItemArvore; agora é AcbItemArvore.
Tentei adivinhar algumas coisas e saiu a instrução abaixo:
select
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD,
	sum(aia.iarv_qtde) as QtdeComp
from
	Placas pl -- aqui é Placas mesmo ?
left outer join
	AcbCentr acen
	on acen.cen_codpn = pl.Pla_CodPN
left outer join
	AcbItemArvore aia
	on aia.IArv_CodPN = pl.Pla_CodPNInicial
where
	pl.pla_codpn in	(
						select distinct pla_codpn
						from AcbPlacas -- aqui é AcbPlacas mesmo ?
						where Pla_CodPNInicial = '552600283301'
					)
group by
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD
order by
	Pla_CodPNInicial

GOSTEI 0
Vagner

Vagner

17/01/2023

quando usadas as funções de agregação (sum, count, avg, max. min, etc...) use GROUP BY em vez de usar DISTINCT
na primeira parte você cita as tabelas ItemArvore, Placas e AcbPlacas.
Na segunda parte não tem mais a tabela ItemArvore; agora é AcbItemArvore.
Tentei adivinhar algumas coisas e saiu a instrução abaixo:
select
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD,
	sum(aia.iarv_qtde) as QtdeComp
from
	Placas pl -- aqui é Placas mesmo ?
left outer join
	AcbCentr acen
	on acen.cen_codpn = pl.Pla_CodPN
left outer join
	AcbItemArvore aia
	on aia.IArv_CodPN = pl.Pla_CodPNInicial
where
	pl.pla_codpn in	(
						select distinct pla_codpn
						from AcbPlacas -- aqui é AcbPlacas mesmo ?
						where Pla_CodPNInicial = '552600283301'
					)
group by
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD
order by
	Pla_CodPNInicial

GOSTEI 0
Vagner

Vagner

17/01/2023

quando usadas as funções de agregação (sum, count, avg, max. min, etc...) use GROUP BY em vez de usar DISTINCT
na primeira parte você cita as tabelas ItemArvore, Placas e AcbPlacas.
Na segunda parte não tem mais a tabela ItemArvore; agora é AcbItemArvore.
Tentei adivinhar algumas coisas e saiu a instrução abaixo:
select
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD,
	sum(aia.iarv_qtde) as QtdeComp
from
	Placas pl -- aqui é Placas mesmo ?
left outer join
	AcbCentr acen
	on acen.cen_codpn = pl.Pla_CodPN
left outer join
	AcbItemArvore aia
	on aia.IArv_CodPN = pl.Pla_CodPNInicial
where
	pl.pla_codpn in	(
						select distinct pla_codpn
						from AcbPlacas -- aqui é AcbPlacas mesmo ?
						where Pla_CodPNInicial = '552600283301'
					)
group by
	pl.pla_codpn, acen.Cen_Descricao, acen.Cen_PNdoCliente, pl.Pla_CodCelulaSMD
order by
	Pla_CodPNInicial




Emerson Funcionou a sua sugestão!!! muito obrigado!!

O campo realmente é placas, eu havia inserido um acb por engano na frente da descrição!

muito obrigado
GOSTEI 0
POSTAR