none
Subtotal de Soma de horas RRS feed

  • Pergunta

  • Prezados Amigos,

    Necessito fazer uma consulta que me retorne o subtotal de uma somatório de horas.

    Abaixo ponho minha instrução que me dá o período por funcionário, mas preciso somar um subtotal por dia, +/- assim:

    Nome    Entrada     Saída           Permanência

    Fulano  12:00:00    13:00:00        01:00:00

    Funlano 13:30:00    14:00:00       00:30:00

    SubTotal                                         01:30:00

     

    Só não consigo a parte do subtotal.  Segue minha query:

    cmdRs = "SELECT *, CONVERT(CHAR(08), DATEADD(s,DATEDIFF(s,FHE,FHS), '00:00:00'), 114) AS Tempo " _
        & "FROM tbl_DOT " _
        & "WHERE rMatri = " & Idd _
        & " AND " & FaixaData _
        & " ORDER BY dtE DESC"

    Conto com vcs. 

    Obrigado

    quinta-feira, 30 de novembro de 2006 16:02

Todas as Respostas

  • cara +- isso

    drop table #exemplo
    Create Table #Exemplo (Codigo int, Nome varchar(10), Entrada datetime, Saída datetime)

    insert into #Exemplo (Codigo, Nome, Entrada, Saída) Values (1,'Fulano',   '12:00:00','13:00:00')
    insert into #Exemplo (Codigo, Nome, Entrada, Saída) Values (1,'Fulano',   '13:30:00','14:00:00')
    insert into #Exemplo (Codigo, Nome, Entrada, Saída) Values (2,'Beltrano', '01:30:00','14:00:00')

    select *, DateDiff(n,entrada, Saída)/60
    From #exemplo

    Select #Exemplo.Codigo, #Exemplo.Nome,
           Right('0'+Convert(varchar(02),DateDiff(n,entrada, Saída)/60),2) + ':' +
           Right('0'+Convert(varchar(02),DateDiff(n,entrada, Saída)%60),2) As Permanencia,
           Convert(varchar(06),(Subtotal.Subtotal)/60) + ':' + Convert(varchar(06),(Subtotal.Subtotal)%60) SubTotal
    From #Exemplo
     Inner Join ( Select Codigo, 'Z-Total' Ordem, Sum(DateDiff(n,entrada, Saída)) Subtotal
                  From #Exemplo Group by Codigo) SubTotal On SubTotal.Codigo = #Exemplo.Codigo

     

    Abs;

    quinta-feira, 30 de novembro de 2006 16:36
  • Marcelo,

     

    Vou tentar o exemplo e retorno o resultado depois. 

     

    Valeu.

    quinta-feira, 30 de novembro de 2006 16:42
  • Marcelo,

    não consegui usar o código.  Vc já testou esse código?

    Abs.

    quinta-feira, 30 de novembro de 2006 20:20
  • rodei sim funcionou, qual erro deu ai. ? mais a ideia e trazer os subtotais em uma derivada.

    Abs;

    sexta-feira, 1 de dezembro de 2006 09:19
  • Olá Perrot

    O código do Marcelo esta certo, o que deve acontecer com você é que na primeira vez que roda a query a tabela temporaria não existe ai dá um aviso. Pega o código do Marcelo e cria uma procedure, assim quando a procedure terminar a tabela temporaria é "dropada" automaticamente. 

    sexta-feira, 1 de dezembro de 2006 13:22
  • Vou tentar novamente.

    Assim que eu conseguir eu posto...

    Obrigado.

    Abs.

    sexta-feira, 1 de dezembro de 2006 16:03
  • Olá amigo,

    Existe outra maneira para obter subtotais.

    Faz um select normal com as horas e depois outro com a sumatoria.

    DEpois, faz um union para unir os resultados e em seguida ordene .

    Qualquer dúvida, pode conversar comigo através do msn: explouder@hotmail.com

    Segue um exemplo:

     

    select isnull (b.nomloc ,'SEM DEPARTAMENTO')

    as nomloc,a.*

    from enviado_recebidos a

    left join mail_emailXdepartamentos b

    on a.email=b.email

     

    union all

    select isnull (b.nomloc ,'SEM DEPARTAMENTO')

    as nomloc,'Sub Total:',sum(qtd_recebidos)

    from enviado_recebidos a

    left join mail_emailXdepartamentos b

    on a.email=b.email

    group by b.nomloc

    order by nomloc,email

    sábado, 16 de dezembro de 2006 20:55