Geizie 0 Denunciar post Postado Maio 3, 2013 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
Motta 645 Denunciar post Postado Maio 3, 2013 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
Geizie 0 Denunciar post Postado Maio 3, 2013 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
Motta 645 Denunciar post Postado Maio 3, 2013 Não sei, mas tendo a tabela ponteirada o CASE é melhor. Compartilhar este post Link para o post Compartilhar em outros sites
Geizie 0 Denunciar post Postado Maio 3, 2013 Obrigada pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites