none
Soma de horas sql + group by.

    Pergunta

  • Olá, preciso de ajuda.
    tenho o seguinte código e está exibindo os campos - " colaborador , UsuIDGrupo, UsuID,TGde,TGate,datas que é o campo TGde mas sem a parte das horas e o campo horas que é a diferença entre TGde e TGate e o campo TTgasID

    está selecionando inicialmente para apenas um colaborador que no exemplo usei como "ribamar", mas eu pretendo selecionar para um determinado grupo onde vai exibir todos os colaboradores daquele grupo.
    Eu preciso que em vez de varios registros do ribamar, que vira apenas um registro no período de tempo que eu selecionei
    onde exiba o total do campo "horas" que seriam o total de horas trabalhadas dele naquele período. 
    e depois exibir "ribamar - 300horas no periodo selecionado


    SELECT
    usuario.UsuNome AS Colaborador,usuario.UsuIDGrupo ,tempogastoAtividade.usuID,
    tempogastoAtividade.TGativde AS TGde,tempogastoAtividade.TGativAte AS TGate,

    CONVERT(VARCHAR,TGativDe , 3) AS datas,
    CONVERT(VARCHAR, DATEDIFF(DAY, tempogastoAtividade.TGativDe, tempogastoAtividade.TGativAte)) + 'd ' + RIGHT('00' + ':' +
    CONVERT(VARCHAR, DATEDIFF(HOUR, tempogastoAtividade.TGativDe, tempogastoAtividade.TGativAte) % 24), 2)
    + ':' + RIGHT('00' + CONVERT(VARCHAR, DATEDIFF(MINUTE, tempogastoAtividade.TGativDe, tempogastoAtividade.TGativAte) % 60), 2) + ':'
    + RIGHT('00' + CONVERT(VARCHAR, DATEDIFF(SECOND, tempogastoAtividade.TGativDe, tempogastoAtividade.TGativAte) % 60), 2) AS Horas ,
    tempogastoAtividade.TTgasID

    FROM tempogastoAtividade, usuario
    WHERE tempogastoAtividade.usuID = usuario.usuID
    AND usuario.EmpLiberada = 1
    AND usuario.UsuNome = 'Ribamar Matias'
    AND tempogastoAtividade.TGativDe >= '01/01/2018'
    AND tempogastoAtividade.TGativAte <= '03/01/2018 23:59:00'

    
    segunda-feira, 12 de março de 2018 17:26

Respostas

  • Eu preciso que em vez de varios registros do ribamar, que vira apenas um registro no período de tempo que eu selecionei onde exiba o total do campo "horas" que seriam o total de horas trabalhadas dele naquele período.

    O enunciado me pareceu um pouco confuso, mas verifique se é isto que solicita:

    -- código #1 v2
    --> informe período
    declare @De datetime, @Até datetime;
    set @De= convert(datetime, '1/1/2018', 103);
    set @Até= convert(datetime, '3/1/2018', 103);
    
    --> informe grupo
    declare @IdGrupo ...;
    set @IdGrupo= ...;
    -- ajusta data final set @Até= dateadd(day, +1, @Até); -- with somaMinutos as ( SELECT U.UsuNome, U.UsuIDGrupo, U.usuID, sum(datediff(minute, T.TGativde, T.TGativAte)) as Minutos from tempogastoAtividade as T inner join usuario as U on T.usuID = U.usuID where U.EmpLiberada = 1 and U.UsuIDGrupo = @IdGrupo and T.TGativDe >= @De and T.TGativAte < @até group by U.UsuNome, U.UsuIDGrupo, U.usuID ) SELECT UsuNome, UsuIDGrupo, usuID, Minutos from somaMinutos;

    Declare a variável @IdGrupo com o mesmo tipo de dados da coluna UsuIDGrupo e informe o valor a selecionar.

    No segundo SELECT você deve acrescentar a conversão de minutos para dhms, usando a coluna Minutos como valor a converter.


    e-mail       José Diz     Belo Horizonte, MG - Brasil



    terça-feira, 13 de março de 2018 09:36
    Moderador

Todas as Respostas

  • Elitesz,

    Quais seriam as colunas que você gostaria de utilizar no Group By?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 12 de março de 2018 22:55
  • Eu preciso que em vez de varios registros do ribamar, que vira apenas um registro no período de tempo que eu selecionei onde exiba o total do campo "horas" que seriam o total de horas trabalhadas dele naquele período.

    O enunciado me pareceu um pouco confuso, mas verifique se é isto que solicita:

    -- código #1 v2
    --> informe período
    declare @De datetime, @Até datetime;
    set @De= convert(datetime, '1/1/2018', 103);
    set @Até= convert(datetime, '3/1/2018', 103);
    
    --> informe grupo
    declare @IdGrupo ...;
    set @IdGrupo= ...;
    -- ajusta data final set @Até= dateadd(day, +1, @Até); -- with somaMinutos as ( SELECT U.UsuNome, U.UsuIDGrupo, U.usuID, sum(datediff(minute, T.TGativde, T.TGativAte)) as Minutos from tempogastoAtividade as T inner join usuario as U on T.usuID = U.usuID where U.EmpLiberada = 1 and U.UsuIDGrupo = @IdGrupo and T.TGativDe >= @De and T.TGativAte < @até group by U.UsuNome, U.UsuIDGrupo, U.usuID ) SELECT UsuNome, UsuIDGrupo, usuID, Minutos from somaMinutos;

    Declare a variável @IdGrupo com o mesmo tipo de dados da coluna UsuIDGrupo e informe o valor a selecionar.

    No segundo SELECT você deve acrescentar a conversão de minutos para dhms, usando a coluna Minutos como valor a converter.


    e-mail       José Diz     Belo Horizonte, MG - Brasil



    terça-feira, 13 de março de 2018 09:36
    Moderador
  • é que eu não consigo mandar imagem . 

    Eu preciso que exiba, colaborador, Datas, e as horas totais no caso no periodo que eu selecionar. 
    terça-feira, 13 de março de 2018 13:53
  • Elitesz,

    O exemplo apresentado pelo José Diz não ajudou?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 15 de março de 2018 12:20