none
Adicionando contador a uma query RRS feed

  • 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?

    sexta-feira, 14 de dezembro de 2012 12:29

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
    sexta-feira, 14 de dezembro de 2012 12:58

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.

    sexta-feira, 14 de dezembro de 2012 12:33
  • 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]

    sexta-feira, 14 de dezembro de 2012 12:40
  • Dia    DFMedia    UTMedia
    11         1                1
    12         1                1
    13         1                1

    O 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.


    sexta-feira, 14 de dezembro de 2012 12:40
  • Os intervalos são definidos em uma variável que seja substituída por uma caixa de texto no sistema, ou seja eu estipulo na chamada da procedure exec dbo.sp_graficosIndicadores 'Flotação','12/14/2012'
    sexta-feira, 14 de dezembro de 2012 12:48
  • 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]

    sexta-feira, 14 de dezembro de 2012 12:55
  • 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
    sexta-feira, 14 de dezembro de 2012 12:58