none
Replicate com SUM sem agrupamento RRS feed

  • Pergunta

  • Olá pessoal!!

    Tenho o seguinte select:

    SELECT DISTINCT
     IdTurma,
     TotalHoras = REPLICATE('0',2-LEN(HrRealizadas))+ CAST((SUM(HrRealizadas) % 60) AS VARCHAR(2)) + ':' + REPLICATE('0',2-LEN(MinRealizados))+ CAST((SUM(MinRealizados) % 60) AS VARCHAR(2))
    FROM FREQUENCIA
    WHERE IdTurma IN (11201,11195,11215)
    GROUP BY IdTurma, HrRealizadas, MinRealizados


    Ele está me retornando:

    IdTurmaPQ TotalHoras
    11195          04:45
    11195          36:00
    11201          05:00
    11215          02:25
    11215          02:35
    11215          05:00

    Porém gostaria que ele me retornasse cada turma com o seu total.

    As colunas da tabela que eu estou utilizando são essas:

    IdTurmaPQ HrRealizadas MinRealizados
    11195             12                 0
    11195             12                 0
    11195             12                 0
    11195               4                45
    11201               5                 0
    11215               2                25
    11215               2                35
    11215               5                 0

    Alguém pode me dar um help, por favor?

    Obrigada.

     

     

    quinta-feira, 22 de março de 2012 16:58

Respostas

  • Fernanda, segue um exemplo:

    --Declarei uma tabela temporária
    declare @frequencia as table (IdTurmaPQ int, HrRealizadas int, MinRealizados int)
    
    -- Populei a tabela
    insert into @frequencia 
    select 11195, 12,    0 union all
    select 11195, 12,    0 union all
    select 11195, 12,    0 union all
    select 11195,  4,   45 union all
    select 11201,  5,    0 union all
    select 11215,  2,   25 union all
    select 11215,  2,   35 union all
    select 11215,  5,    0
    
    -- Resultado
    SELECT 
        IdTurmaPQ
        
        ,right('00'+convert(varchar,(((SUM(HrRealizadas)*60) + SUM(MinRealizados))/60)),2) 
         +':'+
         right('00'+convert(varchar,(((SUM(HrRealizadas)*60) + SUM(MinRealizados))%60)),2) as Tempo
    FROM 
        @FREQUENCIA
    WHERE 
        IdTurmaPQ IN (11201,11195,11215)
    GROUP BY 
        IdTurmaPQ 


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    quinta-feira, 22 de março de 2012 19:22

Todas as Respostas

  • Fernanda

    como estão os dados em sua tabela? esta faltando algo... acho que falta um group by por data para ter esta divisão de 12 hrs por dia... posta como estao os registros em sua tabela e quais colunas vc tem nela...


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 22 de março de 2012 18:06
    Moderador
  • Olá Marcelo.

    Consegui andar um pouco, mas o problema agora é que os minutos estão me retornando de forma errada, não sei o que está acontecendo...

    CREATE TABLE #tabela (IdTurma INT, HrRealizadas INT, MinRealizados INT)

    INSERT INTO #tabela VALUES (11195, 12, 0)
    INSERT INTO #tabela VALUES (11195, 12, 0)
    INSERT INTO #tabela VALUES (11195, 12, 0)
    INSERT INTO #tabela VALUES (11195, 4, 45)
    INSERT INTO #tabela VALUES (11201, 5, 0)

    INSERT INTO #tabela VALUES (11215, 2, 25)
    INSERT INTO #tabela VALUES (11215, 2, 35)
    INSERT INTO #tabela VALUES (11215, 5, 0)

    SELECT IdTurma, CASE len(CAST(SUM(HrRealizadas)AS VARCHAR))
                WHEN 1 THEN  '0' + CAST(SUM(HrRealizadas)AS VARCHAR)
                ELSE CAST(SUM(HrRealizadas)AS VARCHAR) END + ':' +
                CASE len(cast(SUM(MinRealizados) AS VARCHAR))
                WHEN 1 THEN '0' + cast(SUM(MinRealizados) AS VARCHAR)
                ELSE cast(SUM(MinRealizados) AS VARCHAR) end
                AS Total
    FROM #tabela GROUP BY IdTurma

    Obrigada!

    quinta-feira, 22 de março de 2012 18:44
  • Fernanda, segue um exemplo:

    --Declarei uma tabela temporária
    declare @frequencia as table (IdTurmaPQ int, HrRealizadas int, MinRealizados int)
    
    -- Populei a tabela
    insert into @frequencia 
    select 11195, 12,    0 union all
    select 11195, 12,    0 union all
    select 11195, 12,    0 union all
    select 11195,  4,   45 union all
    select 11201,  5,    0 union all
    select 11215,  2,   25 union all
    select 11215,  2,   35 union all
    select 11215,  5,    0
    
    -- Resultado
    SELECT 
        IdTurmaPQ
        
        ,right('00'+convert(varchar,(((SUM(HrRealizadas)*60) + SUM(MinRealizados))/60)),2) 
         +':'+
         right('00'+convert(varchar,(((SUM(HrRealizadas)*60) + SUM(MinRealizados))%60)),2) as Tempo
    FROM 
        @FREQUENCIA
    WHERE 
        IdTurmaPQ IN (11201,11195,11215)
    GROUP BY 
        IdTurmaPQ 


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    quinta-feira, 22 de março de 2012 19:22
  • Muito obrigada. Perfeito!!! =)

    quinta-feira, 22 de março de 2012 19:26
  • Fernanda

    Segue um exemplo usando CTE

    declare @tbTeste as table (IdTurmaPQ int, HrRealizadas int, MinRealizados int)
    insert into @tbTeste values (11195, 12, 0),
    (11195,12,0),
    (11195,12,0),
    (11195,4,45),
    (11201,5,0),
    (11215,2,25),
    (11215,2,35),
    (11215,5,0)
    ;with cte_dados
    as(
    select IdTurmaPQ, SUM(HrRealizadas) as horas, SUM(MinRealizados) as minutos 
    from @tbTeste
    GROUP BY IdTurmaPQ
    )
    select IdTurmaPQ, horas+minutos/60 as 'horas', minutos%60 as 'minutos' from cte_dados


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 22 de março de 2012 19:30
    Moderador