none
Sumar Horas RRS feed

  • Pregunta

  • Hola

    Necesito saber como se pueden sumar horas en una consulta a una base de datos

    Si las columnas de la base de datos fueran numeros enteros:

    Nombre, Tipo, Kg

    funciona con la instruccion

    SELECT Nombre, Tipo, SUM(kg) AS TotalKg from Tabla1 GROUP BY Nombre, Tipo

    pero si en vez de kg fueran horas

    Nombre, Tipo, Horas

    lo que quiero seria mas o menos esto:

    SELECT Nombre, Tipo, Sum(FORMATTIME(Horas(hh:mm)) AS TotalHoras FROM Tabla1 GROUP BY Nombre, Tipo

    Seria para sumar las horas que hacen los trabajadores cada dia de un tipo de faena

    Gracias

    miércoles, 23 de mayo de 2012 20:02

Respuestas

  • si sumaras horas, lo podrias hacer de esta manera, asumiendo que el campo que almacena las horas es Time o DateTime

    SELECT SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) totalMinutos FROM <tabla>

    con esa lineas obtendrias el total de horas en minutos, así que abria que pasarlo a horas.

    SELECT SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) / 60 totalHoras,
           SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) % 60 totalMinutos
    FROM <tabla>
    WHERE <where>
    GROUP BY <group>

    seria, pasarlo las horas a minutos + los minutos, totalizar y luego el total de minutos pasarlo a horas y minutos.

    espero te oriente.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 23 de mayo de 2012 22:04

Todas las respuestas

  • si sumaras horas, lo podrias hacer de esta manera, asumiendo que el campo que almacena las horas es Time o DateTime

    SELECT SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) totalMinutos FROM <tabla>

    con esa lineas obtendrias el total de horas en minutos, así que abria que pasarlo a horas.

    SELECT SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) / 60 totalHoras,
           SUM((DATEPART(HOUR, <campo>) * 60) + DATEPART(MINUTE, <campo>)) % 60 totalMinutos
    FROM <tabla>
    WHERE <where>
    GROUP BY <group>

    seria, pasarlo las horas a minutos + los minutos, totalizar y luego el total de minutos pasarlo a horas y minutos.

    espero te oriente.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 23 de mayo de 2012 22:04
  • claro!!!!... asumiendo que es en SQL Server

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    miércoles, 23 de mayo de 2012 22:09
  • Si es en sql server.

    He probado con el ejemplo que me diste pero me pone "No se han especificado valores para algunos de los parámetros requeridos".

    El código que he utilizado es este:

    oCliente.adaptador = New OleDbDataAdapter("SELECT Nombre, Tipo, SUM((DATEPART(HOUR, Horas) * 60)" & _

    " + DATEPART(MINUTE, Horas)) / 60 AS totalHoras, SUM((DATEPART(HOUR, Horas) * 60) + DATEPART(MINUTE, Horas))" & _

    " % 60 AS totalMinutos FROM Tabla3 GROUP BY Nombre, Tipo;", oCliente.conexion)



    Josep Alba


    • Editado Josep Alba jueves, 24 de mayo de 2012 12:26
    jueves, 24 de mayo de 2012 12:11
  • Pruebalo primero directamente en SQL Serve, si te funciona, acomoda la sentencia en VB, porque según el mensaje de error estas indicando un parametro en la sentencia, pero no se ve, según el código que expones.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    jueves, 24 de mayo de 2012 13:34
  • Voy a intentarlo

    Josep Alba

    jueves, 24 de mayo de 2012 13:44
  • Lo siento, no consigo encontrar nada..

    Por cierto la base de datos es de access por si hay alguna diferencia..


    Josep Alba


    • Editado Josep Alba jueves, 24 de mayo de 2012 20:23
    jueves, 24 de mayo de 2012 20:22
  • Lo siento, no consigo encontrar nada..

    Josep Alba

    ok.... create una tabla, pasa el script y la insercion de un par de ejemplos para hacer pruebas.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    jueves, 24 de mayo de 2012 20:24
  • Si lo hago con una tabla en sql funciona perfecto pero en la tabla de access me sale siempre el mismo error.

    Josep Alba

    jueves, 24 de mayo de 2012 20:49
  • Si lo hago con una tabla en sql funciona perfecto pero en la tabla de access me sale siempre el mismo error.

    Josep Alba

    oh!!!!... pero yo dije que el código era para SQL Server no para access, así que tendras que traducirlo al SQL de access.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor


    jueves, 24 de mayo de 2012 20:55
  • Olaaaaa

    Ya lo consegui. Utilize tu codigo y buscando al final me salio.

    La consulta para access sumando las horas quedaria asi:

    Adaptador = New OleDbDataAdapter("SELECT Nombre, Tipo, " & _
                     "cint((SUM(HOUR(Horas) * 60 + MINUTE(Horas))) \ 60) & ':' " & _
                     " & format((SUM(HOUR(Horas) * 60 + MINUTE(Horas)) mod 60),'00') AS totalMinutos  " & _
                     " FROM Tabla3 GROUP BY Nombre, Tipo", conexion)


    A mi me funciono.

    Muchas gracias


    Josep Alba




    • Editado Josep Alba martes, 29 de mayo de 2012 12:10
    lunes, 28 de mayo de 2012 21:11