none
Inserir linhas faltantes na base RRS feed

  • Pergunta

  • Bom dia pessoal!

    Estou com o seguinte problema :

    Tenho um base com os seguintes campos: Data,cod_cliente,cod_prod,total_venda,pertence_cesta

    Tenha seguinte amostra:

    2017-01-01;1;1;5;1

    2017-01-02;1;1;7;1

    2017-01-04;1;1;8;1

    2017-01-05;1;1;12;1

    Segundo a amostra acima, o dia 2017-01-03 está faltando, então preciso inserir este registro na base deixando o campo total_venda zerado.

    O resultado final deve ser este

    2017-01-01;1;1;5;1

    2017-01-02;1;1;7;1

    2017-01-03;1;1;0;1

    2017-01-04;1;1;8;1

    2017-01-05;1;1;12;1

    Tenho a tabela calendario que tem todos os dias do ano

    Tentei executar a query abaixo para inserir as linhas faltantes em uma tabela à parte, mas nao muito certo.

    insert into tabela_auxiliar
    select distinct 
    n.cod_cliente,
    r.data,  
    n.cod_prod,                             
    pertence_cesta                        
    coalesce(total_venda,0) as total_venda,           
    from  tabela as n, calendario as r
    where 
     year(data)=2017
    and month(data)=12
    and year(r.dia)=2017
    and month(r.dia)=12
    --order by r.dia
    union
    select distinct 
    cod_cliente,                 
    case when  data is null then dia else data end,                      
    cod_prod,
    pertence_cesta                        
    coalesce(vol_sellin_desconhecido,0) as vol_sellin,           
    from calendario as a
    inner join  (select * from  tabela
    ) as b
    on year(a.dia) = year(b.data)
    and month(a.dia) = month(b.data)
    and day(a.dia)  = day(b.data)
    and b.cod_prod = b.cod_prod
    where year(dia)=2017
    and month(dia)=12;

    Podem me ajudar?

    Muito obrigado!

    2017-N01-01;1;1;5;1

    2017-01-02;1;1;7;1

    2017-01-04;1;1;8;1

    2017-01-05;1;1;12;1

    terça-feira, 6 de março de 2018 13:09

Respostas

  • Bom dia,

    Experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    with CTE_CliProd as ( select distinct cod_cliente, cod_prod, pertence_cesta from tabela ) select r.dia, n.cod_cliente, n.cod_prod, 0, n.pertence_cesta from CTE_CliProd as n cross join calendario as r where r.dia between '20171201' and '20171231' and not exists (select 1 from tabela as s where s.cod_cliente = n.cod_cliente and s.cod_prod = n.cod_prod and

    s.pertence_cesta = n.pertence_cesta and s.data = r.dia)


    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br


    terça-feira, 6 de março de 2018 13:26

Todas as Respostas

  • Bom dia,

    Experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    with CTE_CliProd as ( select distinct cod_cliente, cod_prod, pertence_cesta from tabela ) select r.dia, n.cod_cliente, n.cod_prod, 0, n.pertence_cesta from CTE_CliProd as n cross join calendario as r where r.dia between '20171201' and '20171231' and not exists (select 1 from tabela as s where s.cod_cliente = n.cod_cliente and s.cod_prod = n.cod_prod and

    s.pertence_cesta = n.pertence_cesta and s.data = r.dia)


    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br


    terça-feira, 6 de março de 2018 13:26
  • gapimex, Muito obrigado!!!

    Só mais um detalhe. Criei uma tabela para inserir o output da Query, mas ele nao consegue inserir à partir da consulta acima. Não funciona Insert with CTE?

    Obrigado mais um vez

    terça-feira, 6 de março de 2018 15:55
  • Veja esta resposta do StackOverflow: https://stackoverflow.com/a/3306122/1184708



    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    terça-feira, 6 de março de 2018 16:54
  • Fabio,

    O insert funciona sim, ao invés de realizar o Select da CTE você terá que executar o Insert baseado na CTE logo após a declaração do bloco de código da CTE.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 7 de março de 2018 18:12