none
União de tabelas - Budget x Realizado RRS feed

  • 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

    sexta-feira, 17 de agosto de 2018 13:31

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

    sexta-feira, 17 de agosto de 2018 13:47
  • Deleted
    sexta-feira, 17 de agosto de 2018 15:04

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

    sexta-feira, 17 de agosto de 2018 13:47
  • Deleted
    sexta-feira, 17 de agosto de 2018 15:04
  • 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.

    sexta-feira, 17 de agosto de 2018 16:35