Usuário com melhor resposta
Como trazer data sem registro Sql server 2008

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 DATAsaída:
02/10/2015 00:00:00 36312
05/10/2015 00:00:00 25382
06/10/2015 00:00:00 3655
- Editado rafael_cesar01 sexta-feira, 27 de maio de 2016 13:47
Respostas
-
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
- Marcado como Resposta Thales F Quintas sexta-feira, 27 de maio de 2016 18:21
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
- Sugerido como Resposta Junior Galvão - MVPMVP domingo, 29 de maio de 2016 00:56
-
-
O que ocorreu exatamente? Foi exibida alguma mensagem de erro? Se foi, qual?
Assinatura: http://www.imoveisemexposicao.com.br
-
era um erro de datas,
montei baseado no seu exemplo,
declare @startDate date;
ainda não funcionou, tentei algo do tipo, somente a CT trás as datas, quando relaciono vem somente as datas com valores.
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
- Editado rafael_cesar01 sexta-feira, 27 de maio de 2016 16:56
-
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
- Marcado como Resposta Thales F Quintas sexta-feira, 27 de maio de 2016 18:21
-