Usuário com melhor resposta
Adicionando contador a uma query

Pergunta
-
Possuo esse SELECT para me retornar os dias que contem dados gravados.
SELECT DAY(Start_Time) As Dia ,AVG (DF) AS DFMedia, AVG(UT) AS UTMedia FROM @temp WHERE MONTH(Start_Time) = MONTH(@data) GROUP BY DAY(Start_Time)
Como consigo adicionar os 31 dias no resultado da consulta mesmo não contendo dados nos dias anteriores e posteriores?
Respostas
-
Bom dia,
Não sei se entendi corretamente a questão, mas experimente mais ou menos desta forma:
with CTE_D as ( select DATEADD(DAY, 1 - DAY(@Data), @Data) as Data union all select DATEADD(DAY, 1, Data) from CTE_D where MONTH(DATEADD(DAY, 1, Data)) = MONTH(@Data) ) SELECT DAY(d.Data) As Dia, AVG(t.DF) AS DFMedia, AVG(t.UT) AS UTMedia FROM CTE_D as d LEFT JOIN @temp as t ON DATEADD(DAY, DATEDIFF(DAY, 0, t.Start_Time), 0) = d.Data GROUP BY DAY(d.Data)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta _Juliano_Alves_ sexta-feira, 14 de dezembro de 2012 14:05
- Marcado como Resposta USER65466785673453 sexta-feira, 14 de dezembro de 2012 15:51
Todas as Respostas
-
Magdiel,
Você poderia nos fornecer mais informações, como por exemplo o retorno que você espera da consulta?
Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
Magdiel,
Esta sua tabela temporária possui todos os intervalos de datas que você esta tentando trabalhar?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Dia DFMedia UTMedia
11 1 1
12 1 1
13 1 1O que me retorna dessa consulta é isso (EX) acima, só que eu preciso de todos os dias da coluna dia, mesmo que os valores retornem nulos, pois na resposta da consulta só me retorna os dias que tem os dados gravados.
- Editado USER65466785673453 sexta-feira, 14 de dezembro de 2012 12:41 esqueci
-
-
Magdiel,
Perfeito, mas a procedure esta retornando os dados para posteriormente retornar os dias?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Bom dia,
Não sei se entendi corretamente a questão, mas experimente mais ou menos desta forma:
with CTE_D as ( select DATEADD(DAY, 1 - DAY(@Data), @Data) as Data union all select DATEADD(DAY, 1, Data) from CTE_D where MONTH(DATEADD(DAY, 1, Data)) = MONTH(@Data) ) SELECT DAY(d.Data) As Dia, AVG(t.DF) AS DFMedia, AVG(t.UT) AS UTMedia FROM CTE_D as d LEFT JOIN @temp as t ON DATEADD(DAY, DATEDIFF(DAY, 0, t.Start_Time), 0) = d.Data GROUP BY DAY(d.Data)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta _Juliano_Alves_ sexta-feira, 14 de dezembro de 2012 14:05
- Marcado como Resposta USER65466785673453 sexta-feira, 14 de dezembro de 2012 15:51