Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nelson Cruz

Problemas para agrupar tabelas

Recommended Posts

Pessoal tenho três tabelas uma chamada SISTB001_PENDENCIAS (onde gravo todo os registros), uma tabela para os produtos SISTB002_PRODUTOS, e uma para todos os tipos de pendencias SISTB005_PENDENCIAS_TIPO.

 

Eu preciso fazendo uma query que me traga todos os produtos e para cada produtos todos os tipos de pendencia e quantas ocorrencias nos temos.

 

minha query só está trazendo os produtos.

 

SELECT     SISTB002_PRODUTOS.PRODUTOS, SISTB005_PENDENCIAS_TIPO.PENDENCIAS, COUNT(SISTB001_PENDENCIAS.cod) AS TOTAL
FROM         SISTB005_PENDENCIAS_TIPO LEFT OUTER JOIN
                      SISTB001_PENDENCIAS ON SISTB005_PENDENCIAS_TIPO.COD = SISTB001_PENDENCIAS.COD_PEND RIGHT OUTER JOIN
                      SISTB002_PRODUTOS ON SISTB001_PENDENCIAS.COD_PROD = SISTB002_PRODUTOS.COD
GROUP BY SISTB002_PRODUTOS.PRODUTOS, SISTB005_PENDENCIAS_TIPO.PENDENCIAS

Segue uma imagem do meu banco com a query funcionando.

DsyUefl.jpg

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou fazer a query sem join explícito e sem outer joins ?!

 

Também partiria de "pendencias".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu fizer isso ela vai retornar apenas os produtos que tem alguma pendencia registrada na SISTB001_PENDENCIAS e eu preciso que o retorno seja por exemplo

PRODUTO PENDENCIA TOTAL
carro vidro quebrado 0
carro porta não abre 10
carro motor queimou 5
carro não da partida 20
moto vidro quebrado 20
moto porta não abre 1
moto motor queimou 0
moto não da partida 42

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo, então faça outer join mas com base em "pendencias".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi direito, mas se foi isso que eu entendi ele só inverte o resultado.

 

Ele mostra todas as pendencias do banco e no campo produto só mostra os que tem registro na SISTB001_PENDENCIAS.

 

Eu preciso que ele traga todos os produtos e para cada produto todos os tipos de pendencia com o contador de registros.

 

um amigo disse que para fazer isso eu precisaria fazer dois select mas eu não tenho ideia de como faria isso.


Algo parecido com isso, mas como não tenho muito conhecimento de SQL, não consigo mudar essa query para me atender.

SELECT     produto.produto, produto.nome, ISNULL(pend.total, 0) AS total


FROM         (SELECT     Produto.produto, tbPendencias_Tipo.cod_tp_pendencia, tbPendencias_Tipo.nome


                       FROM          tbPendencias Produto INNER JOIN


                                              tbPendencias_Tipo ON Produto.cod_tp_pendencia = tbPendencias_Tipo.cod_tp_pendencia


                       GROUP BY Produto.produto, tbPendencias_Tipo.cod_tp_pendencia, tbPendencias_Tipo.nome) produto LEFT OUTER JOIN


                          (SELECT     produto, cod_tp_pendencia, COUNT(*) AS total


                            FROM          tbPendencias p


                            WHERE      (dt_venda BETWEEN '06/06/2014 00:00:00' AND '06/06/2014 23:59:59')


                            GROUP BY produto, cod_tp_pendencia) pend ON produto.cod_tp_pendencia = pend.cod_tp_pendencia AND produto.produto = pend.produto


ORDER BY produto.produto, produto.nome

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser isto

SELECT     SISTB002_PRODUTOS.PRODUTOS, SISTB005_PENDENCIAS_TIPO.PENDENCIAS, 
           COUNT(SISTB001_PENDENCIAS.COD) AS TOTAL
FROM         SISTB002_PRODUTOS   
LEFT OUTER JOIN SISTB005_PENDENCIAS_TIPO
     ON SISTB005_PENDENCIAS_TIPO.COD = SISTB001_PENDENCIAS.COD_PEND                       
LEFT OUTER JOIN SISTB001_PENDENCIAS
      ON SISTB001_PENDENCIAS.COD_PROD = SISTB002_PRODUTOS.COD
GROUP BY SISTB002_PRODUTOS.PRODUTOS, SISTB005_PENDENCIAS_TIPO.PENDENCIAS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ela está dando esse erro..

 

Server: Msg 107, Level 16, State 3, Line 1

The column prefix 'SISTB001_PENDENCIAS' does not match with a table name or alias name used in the query.

 

 

Essa query só funciona invertendo o left outer join de posição e mesmo assim ela retorna as pendencias como null e não coloca para cada produto todas as pendencias.

 

nxGThTf.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.