Ir para conteúdo

POWERED BY:

Arquivado

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

Geizie

Problema com Subquery

Recommended Posts

Pessoal, bom dia.

Estou tentando montar um sql, usando subquery, porém o resultado que retorna na sub não está correto.

 

Vou colar o sql para vocês, se alguém puder me ajudar eu agradeco.

 

SELECT
TabFabricantes.Nome,
SUM(TabProdFilial.EstAtu) AS TotalEstoque,
SUM(TabProdFilial.Custo) AS TotalCusto,
SUM(TabProdFilial.PreVen) AS TotalVenda,
(SELECT SUM(CustoPP.Custo)
FROM TabProdFilial AS CustoPP
WHERE CustoPP.Filial = 1
AND CustoPP.CodPro = TabProdutos.Codigo
AND TabProdutos.CodFab = TabFabricantes.Codigo) AS CustoPP
FROM TabProdutos
INNER JOIN TabFabricantes ON TabProdutos.CodFab = TabFabricantes.Codigo
INNER JOIN TabProdFilial ON TabProdFilial.CodPro = TabProdutos.Codigo
WHERE TabProdutos.Situacao = 'A'
AND TabProdutos.TipoProdCom IN(1)
GROUP BY TabFabricantes.Nome
ORDER BY TotalCusto DESC

 

o Resultado com campo CustoPP de um determinado fabricante tem que dar 15.512,0641

SELECT SUM(TabProdFilial.Custo)
FROM TabProdFilial
INNER JOIN TabProdutos ON TabProdFilial.CodPro = TabProdutos.Codigo
INNER JOIN TabFabricantes ON TabProdutos.CodFab = TabFabricantes.Codigo
WHERE TabProdFilial.Filial = 1
AND TabFabricantes.Codigo = 422
AND TabProdutos.Situacao = 'A'
AND TabProdutos.TipoProdCom IN(1)

 

Mas fazendo com este sql, na sub ta me retornando o valor de 687,6676

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela está ponteirada, tentou com CASE ?

 

 

SELECT
 TabFabricantes.Nome,
 SUM(TabProdFilial.EstAtu) AS TotalEstoque,
 SUM(TabProdFilial.Custo) AS TotalCusto,
 SUM(TabProdFilial.PreVen) AS TotalVenda,
 sum(case when (CustoPP.Filial = 1 AND
                CustoPP.CodPro = TabProdutos.Codigo AND
                TabProdutos.CodFab = TabFabricantes.Codigo) then CustoPP.Custo
          else  0 end)   AS CustoPP
 FROM TabProdutos
 INNER JOIN TabFabricantes ON TabProdutos.CodFab = TabFabricantes.Codigo
 INNER JOIN TabProdFilial ON TabProdFilial.CodPro = TabProdutos.Codigo
 WHERE TabProdutos.Situacao    = 'A'
 AND TabProdutos.TipoProdCom    IN(1)
 GROUP BY TabFabricantes.Nome
 ORDER BY TotalCusto DESC

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Motta, fiz com o case e deu certo.

 

SELECT TabFabricantes.Nome,
TabUsuarios.Nome as Comprador,
SUM(TabProdFilial.EstAtu) AS TotalEstoque,
SUM(TabProdFilial.Custo * TabProdFilial.EstAtu) AS TotalCusto,
SUM(TabProdFilial.PreVen * TabProdFilial.EstAtu) AS TotalVenda,
SUM(CASE WHEN TabProdFilial.Filial = 1 THEN TabProdFilial.Custo * TabProdFilial.EstAtu END) 'CustoPP',

SUM(CASE WHEN TabProdFilial.Filial = 1 THEN TabProdFilial.PreVen * TabProdFilial.EstAtu END)'VendaPP'
FROM TabProdFilial
INNER JOIN TabProdutos ON TabProdutos.Codigo = TabProdFilial.CodPro
INNER JOIN TabFabricantes ON TabProdutos.CodFab = TabFabricantes.Codigo
INNER JOIN TabUsuarios ON TabFabricantes.CodCpr = TabUsuarios.Codigo
WHERE TabProdutos.Situacao = 'A'
AND TabProdutos.TipoProdCom IN(1)
GROUP BY TabFabricantes.Nome, TabUsuarios.Nome
ORDER BY TabUsuarios.Nome, TotalCusto DESC

 

esse tipo de sql nao ia dar certo com subquery mesmo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei, mas tendo a tabela ponteirada o CASE é melhor.

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.