Usuário com melhor resposta
União de tabelas - Budget x Realizado

Pergunta
-
Pessoal, bom dia.
Preciso fazer uma consulta aqui, onde os dados do nosso budget sejam confrontados com as vendas realizadas.
Contudo, na consulta que eu realizei há um problema, ele só lista o budget do que foi vendido, e eu preciso que liste tudo, independente de vendas.
Também pode ocorrer o caso de um item não estar no budget e ser vendido, preciso das duas opções.
Abaixo segue meu script inicial.
Seria possível uma consulta desta maneira ?
Muito obrigado.SELECT AnoFrances, ano, TrimFrances, Mes, Supervisor, CodCLiente, NomeCliente, Estado, CategProd, GrupoProd, LinhaProd, NomePadrao, CodItem, Item, Composicao, DocEntry, NF, Utilizacao, CFOP, IPI, TotalImpostos, CustoProd, CustoUnit, Qtde, Preço, VlrTotal, VlReal, CustoTotal, (select SUM(b.valorprev) from budgetds b where b.CodCLiente = salesmap.CodCLiente and b.ano = salesmap.ano and b.mes = salesmap.mes and b.CodItem = salesmap.CodItem)budget, (select SUM(b.meta) from budgetds b where b.CodCLiente = salesmap.CodCLiente and b.ano = salesmap.ano and b.mes = salesmap.mes and b.CodItem = salesmap.CodItem)budgetkg FROM SALESMAP
Respostas
-
Bom dia,
Pelo que entendi acho que você pode conseguir o resultado esperado utilizando um Full Outer Join.
Segue uma sugestão para testes:
with CTE_Budgetds as ( select CodCliente, Ano, Mes, CodItem, SUM(b.valorprev) as budget, SUM(b.meta) as budgetkg from budgetds group by CodCliente, Ano, Mes, CodItem ) SELECT s.AnoFrances, coalesce(s.ano, b.ano) as ano, s.TrimFrances, coalesce(s.Mes, b.mes) as mes, s.Supervisor, coalesce(s.CodCLiente, b.CodCliente) as CodCliente, s.NomeCliente, s.Estado, s.CategProd, s.GrupoProd, s.LinhaProd, s.NomePadrao, coalesce(s.CodItem, b.CodItem) as CodItem, s.Item, s.Composicao, s.DocEntry, s.NF, s.Utilizacao, s.CFOP, s.IPI, s.TotalImpostos, s.CustoProd, s.CustoUnit, s.Qtde, s.Preço, s.VlrTotal, s.VlReal, s.CustoTotal, b.budget, b.budgetkg FROM SALESMAP as s full join CTE_Budgetds as b on b.CodCLiente = s.CodCLiente and b.ano = s.ano and b.mes = s.mes and b.CodItem = s.CodItem
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Mateus Furrier Rosa sexta-feira, 17 de agosto de 2018 18:50
-
Deleted
- Marcado como Resposta Mateus Furrier Rosa sexta-feira, 17 de agosto de 2018 18:50
Todas as Respostas
-
Bom dia,
Pelo que entendi acho que você pode conseguir o resultado esperado utilizando um Full Outer Join.
Segue uma sugestão para testes:
with CTE_Budgetds as ( select CodCliente, Ano, Mes, CodItem, SUM(b.valorprev) as budget, SUM(b.meta) as budgetkg from budgetds group by CodCliente, Ano, Mes, CodItem ) SELECT s.AnoFrances, coalesce(s.ano, b.ano) as ano, s.TrimFrances, coalesce(s.Mes, b.mes) as mes, s.Supervisor, coalesce(s.CodCLiente, b.CodCliente) as CodCliente, s.NomeCliente, s.Estado, s.CategProd, s.GrupoProd, s.LinhaProd, s.NomePadrao, coalesce(s.CodItem, b.CodItem) as CodItem, s.Item, s.Composicao, s.DocEntry, s.NF, s.Utilizacao, s.CFOP, s.IPI, s.TotalImpostos, s.CustoProd, s.CustoUnit, s.Qtde, s.Preço, s.VlrTotal, s.VlReal, s.CustoTotal, b.budget, b.budgetkg FROM SALESMAP as s full join CTE_Budgetds as b on b.CodCLiente = s.CodCLiente and b.ano = s.ano and b.mes = s.mes and b.CodItem = s.CodItem
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Mateus Furrier Rosa sexta-feira, 17 de agosto de 2018 18:50
-
Deleted
- Marcado como Resposta Mateus Furrier Rosa sexta-feira, 17 de agosto de 2018 18:50
-
Obrigado amigos !
Estou conseguindo entender a lógica agora.
Contudo, acho que preciso dar uma afinada no código para ser mais assertivo no que preciso.
Nas duas tabelas tenho muitos campos em comum: Codcliente, Nomecliente, Coditem, Item, AnoFrances, Ano, Mes, Supervisor, Responsável, LinhaProd e CategProd.
Relacionando todos estes campos, imagino que talvez reduzisse a quantidade de NULLs que apresenta agora.
Muito obrigado pela ajuda.