1
resposta

SQL - Como somar campo de carga horaria que está em decimal e depois mostra o resultado em horas

Eu preciso extrair pelo banco de dados SQL a quantidade de horas cursadas por aluno e por tipo de curso(presencial e online) e o total somando presencial e online , onde pego o campo da carga horaria do curso que está em decimal e tem usuarios que tem mais de 24 hs de horas cursada.

Estou utilizando o script abaixo mas acho que devido a muitos usuarios trem mais de 24 de horas p campo [TOTAL HORAS] não esta dando certo.

Alguém pode me ajudar?


SELECT 


[STATUS ALUNO],
ALUNO,
CAST(LEFT(CONVERT(TIME, DATEADD(SECOND, ISNULL(CAST(SUM([HORAS PRESENCIAIS])*3600 AS INT), 0) + 86400000, 0), 108), 8) AS VARCHAR) [HORAS PRESENCIAIS],
CAST(LEFT(CONVERT(TIME, DATEADD(SECOND, ISNULL(CAST(SUM([HORAS EAD])*3600 AS INT), 0) + 86400000, 0), 108), 8) AS VARCHAR)[HORAS EAD],
CAST(LEFT(CONVERT(TIME, DATEADD(SECOND, ISNULL(CAST(SUM(HORAS)*3600 AS INT), 0) + 86400000, 0), 108), 8) AS VARCHAR) [TOTAL HORAS]
FROM (
    SELECT 
    CASE WHEN U.STATUS = 'A' THEN 'ATIVO' ELSE 'INATIVO' END [STATUS ALUNO],
    U.NOME ALUNO, 
    SUM(HORASPRESENCIAL.HORASPRESENCIAL1) [HORAS PRESENCIAIS], 
    SUM(HORAONLINE.HORAONLINE1) [HORAS EAD], 
    SUM(HORASPRESENCIAL.HORASPRESENCIAL1) + SUM(HORAONLINE.HORAONLINE1) [HORAS]
    FROM SITUACAOALUNOCURSO SAC
    INNER JOIN CURSOS C ON C.CODCURSO = SAC.CODCURSO
    INNER JOIN TURMA T ON T.CODTURMA = SAC.CODTURMA
    INNER JOIN USUARIOS U ON U.CODALUNO = SAC.CODALUNO

LEFT JOIN (SELECT SUM(CON.CARGAHORARIA) HORASPRESENCIAL1,  CON.CODCURSO FROM CURSOS CON WHERE CON.CURSOPRESENCIAL ='S' GROUP BY  CON.CARGAHORARIA,CON.CODCURSO) HORASPRESENCIAL ON  HORASPRESENCIAL.CODCURSO = C.CODCURSO AND HORASPRESENCIAL.CODCURSO = SAC.CODCURSO
LEFT JOIN (SELECT SUM(CON.CARGAHORARIA) HORAONLINE1,  CON.CODCURSO FROM CURSOS CON WHERE CON.CURSOPRESENCIAL <> 'S' GROUP BY  CON.CARGAHORARIA,CON.CODCURSO) HORAONLINE ON  HORAONLINE.CODCURSO = C.CODCURSO AND HORAONLINE.CODCURSO = SAC.CODCURSO    
    GROUP BY U.NOME, U.EMAIL,  C.CARGAHORARIA, U.STATUS
    ) T

GROUP BY [STATUS ALUNO], ALUNO
ORDER BY [TOTAL HORAS]
1 resposta

Olá, Eduardo, tudo bem?

Peço desculpas pela demora no retorno.

Você pode tentar fazer uma inversão no seu código, primeiro realizar os cálculos, para em seguida realizar a conversão de decimal para hora, dessa forma, a sua consulta pode funcionar melhor.

Espero ter ajudado e bons estudos!