none
Como trazer data sem registro Sql server 2008 RRS feed

  • Pergunta

  • bom dia a todos,

    Tenho uma consulta Sql somando valores de cada dia, retornando somente os dias que tem valores. Porem gostaria de apresentar também os dias que não tiveram registros.

    Consulta:

    SELECT DATA, 
           SUM(VALOR)
    FROM TABELA1
    WHERE CONTA = '176087'
    GROUP BY DATA

    saída:

    02/10/2015 00:00:00 36312
    05/10/2015 00:00:00 25382
    06/10/2015 00:00:00 3655







    sexta-feira, 27 de maio de 2016 13:00

Respostas

Todas as Respostas

  • Bom dia,

    Experimente mais ou menos dessa forma:

    with CTE_Datas as
    (
        select @DataIni as Data
    
        union all
    
        select DATEADD(DAY, 1, Data)
        from CTE_Datas
        where Data < @DataFim
    )
    
    select
        d.Data,
        SUM(t.VALOR)
    from CTE_Datas as d
    left join TABELA1 as t
        on t.Data = d.Data
    WHERE 
        t.CONTA = '176087'
    GROUP BY 
        d.DATA

    obs: @DataIni e @DataFim seriam parâmetros contendo  o periodo a ser retornado

    Espero que ajude


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

    sexta-feira, 27 de maio de 2016 13:21
  • Não deu certo o script
    sexta-feira, 27 de maio de 2016 14:36
  • O que ocorreu exatamente? Foi exibida alguma mensagem de erro? Se foi, qual?

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

    sexta-feira, 27 de maio de 2016 15:10
  • era um erro de datas,

    montei baseado no seu exemplo,
    ainda não funcionou, tentei algo do tipo, somente a CT trás as datas, quando relaciono vem somente as datas com valores.

    declare @startDate date;
    declare @endDate date;

    select @startDate = '20160101';
    select @endDate =   '20160331';

    with dateRange as
    (
      select dt = @startDate
      where @startDate < @endDate
      union all
      select dateadd(dd, 1, dt)
      from dateRange
      where dateadd(dd, 1, dt) <= @endDate
    )
    select
        convert(varchar(MAX),d.dt,103),
        SUM(t.VALLAN)
    from dateRange as d
    left join ARQ032 as t on t.DATLAN = d.dt
    WHERE 
        t.NUMCON = '176087'
    GROUP BY 
        d.dt



    sexta-feira, 27 de maio de 2016 16:12
  • Experimente alterar o trecho abaixo

    left join ARQ032 as t on t.DATLAN = d.dt
    WHERE 
        t.NUMCON = '176087'

    para

    left join ARQ032 as t 
        on 
            t.DATLAN = d.dt and
            t.NUMCON = '176087'

    Espero que ajude


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

    sexta-feira, 27 de maio de 2016 17:21
  • Perfeito, me salvou

    obrigado

    sexta-feira, 27 de maio de 2016 17:54