robinhocne Postado Julho 1, 2008 Denunciar Share Postado Julho 1, 2008 Preciso somar a quantidade de horas trabalhada de um funcionario, mas é assim, na minha tabela ponto eu tenho os seguintes campos:FuncionarioDataHorEnt1HorSai1HorEnt2HorSai2pois eu preciso que me em um relatorio me mostre as somas das:HorEnt1HorSai1HorEnt2HorSai2mas não sei se tem como fazer isso com instrução sql, ou por alguma funçãoPreciso de ajuda! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Ricardo Postado Julho 2, 2008 Denunciar Share Postado Julho 2, 2008 (editado) Selectf.funcionario,Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2From tb_func fGroup By FuncionarioOrder By Funcionario/**...Depois tem que definir a data, isso é só incluir a clausula WHERE usando BETWEEN.Nestas linhas SQL ele soma as horas separadamente, se quiser ter as duas, é só depois somar OS CAMPOS [sOMAHORA1 e SOMAHORA2]*/P.S: Corrigido ... ahuuahuaau Editado Julho 3, 2008 por Luis Ricardo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Julho 3, 2008 Denunciar Share Postado Julho 3, 2008 Selectf.funcionario,Sum(f.HorEnt1+f.HorSai1) AS SOMAHORA1,Sum(f.HorEnt2+f.HorSai2) AS SOMAHORA2Luis Ricardo, apenas uma correção.O somatório das horas trabalhadas se fará pela diferença entre a hora de saída e a de entrada, logo, a ordem deve ser invertida:Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2mas pode ser feito tudo de uma só vez:Sum((f.HorSai1-f.HorEnt1) + (f.HorSai2-f.HorEnt2)) AS HORAS_TRABALHADASLembrando que o resultado da operação com o SUM resultará uma valor real (um float, não um time) - esteja atento para este fato. A título de exemplo, 8:00 trabalhadas será listado como 28800. Querendo listar em termos de quantidade de horas, basta que seja dividido este valor por 3600. Neste caso, 28800/3600 => 8;Para usar este valor corretamente no Delphi, como um TTime, ele deverá ser dividido por 60s x 60m x 24h => 3600 x 24 => 86400Assim, 28800/86400=0,333333.. que aplicado a função TimeToStr, mostrará: 08:00:00A forma como usar a informação depende da aplicação que será dada a mesma.Abraçosp.s. estes comentários são válidos, pelo menos para uso com Firebird - banco que o robinhocne provavelmente ainda usa. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Ricardo Postado Julho 3, 2008 Denunciar Share Postado Julho 3, 2008 a ehhhhh hauauhua viajei ^^' e olha q eu trabalho hauua ^^"obrigado pela correção Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 robinhocne Postado Julho 3, 2008 Autor Denunciar Share Postado Julho 3, 2008 Mas não deu certo!dá esse erro:Unsuccessful execution caused by a system error that precludessuccessful execution of subsequent statements.Dynamic SQL Error.expression evaluation not supported.A minha tabela tem essa estrutura:CodigoFuncionarioDataHorEnt1 HorSai1HorEnt2HorSai2Eu utilizo o Firebird 2.0 e delphi 7 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Luis Ricardo Postado Julho 3, 2008 Denunciar Share Postado Julho 3, 2008 Selectf.funcionario,Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2From tb_func fGroup By FuncionarioOrder By Funcionariocolocou esse tmb. Por que quando se da uma soma você precisa agrupar os dados.Neste caso precisamos agrupar por funcionarios.Tenta e me avisa. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 robinhocne Postado Julho 7, 2008 Autor Denunciar Share Postado Julho 7, 2008 Selectf.funcionario,Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2From tb_func fGroup By FuncionarioOrder By Funcionariocolocou esse tmb. Por que quando se da uma soma você precisa agrupar os dados.Neste caso precisamos agrupar por funcionarios.Tenta e me avisa.cara deu certo sim, olha o jeito que ficou:var Total : Integer; Horas : TTime; with QryHora do begin close; sql.Clear; sql.Add('Select f.funcionario, Sum((f.HorSai1-f.HorEnt1) + (f.HorSai2-f.HorEnt2)) AS HORAS_TRABALHADAS From ponto f' +' where F.Funcionario = :Fun and (Data >= :DtInicial) and (Data <= :DtFinal) Group By Funcionario Order By Funcionario'); ParamByName('Fun').AsString := TxtCodFun.Text; ParamByName('DtInicial').AsDate := TxtDatIni.Date; ParamByName('DtFinal').AsDate := TxtDatFin.Date; open; end; Total := QryHora.FieldByName('Horas_Trabalhadas').AsInteger; Horas := Total / 86400; txthoras.Text := TimeToStr(Horas);Resolvido Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Total := QryHora.FieldByN Postado Maio 17, 2009 Denunciar Share Postado Maio 17, 2009 (editado) Mesmo sabendo que o tópico da é antigo, se alguém puder me ajudar na seguinte duvida, eu fiz o procedimento acima pois minha situaçao é a mesmo,porem eu não quero mostrar em um edit e sim preciso desse valor em horas em um field, para colocar em um relatorio. Editado Maio 17, 2009 por Total := QryHora.FieldByN Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Maio 17, 2009 Denunciar Share Postado Maio 17, 2009 Mesmo sabendo que o tópico da é antigo, se alguém puder me ajudar na seguinte duvida, eu fiz o procedimento acima pois minha situaçao é a mesmo,porem eu não quero mostrar em um edit e sim preciso desse valor em horas em um field, para colocar em um relatorio.Crie um campo Time na sua tabela, passe o valor para este campo e salve ... depois voce pode utiliza-lo em um relatórioabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
robinhocne
Preciso somar a quantidade de horas trabalhada de um funcionario, mas é assim, na minha tabela ponto eu tenho os seguintes campos:
Funcionario
Data
HorEnt1
HorSai1
HorEnt2
HorSai2
pois eu preciso que me em um relatorio me mostre as somas das:
HorEnt1
HorSai1
HorEnt2
HorSai2
mas não sei se tem como fazer isso com instrução sql, ou por alguma função
Preciso de ajuda!
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.