Ver Mensaje Individual
  #2  
Antiguo 17-01-2012
papote654 papote654 is offline
Miembro
 
Registrado: nov 2006
Posts: 29
Reputación: 0
papote654 Va por buen camino
matriz consultas anidadas y agrupadas

saludos amigo,

segun entiendo lo que quieres son los dias en columna y en las filas las horas con la suma de un valor. como planteas tu tabla, debes llevar los registros o dias de las fechas a columna y eso lo haces en SQL con la funcion PIVOT que esta en funcionamiento desde SQL 2005 sino mal recuerdo.

aqui te hice un ejemplo espero sea lo que necesitas.

te comento que uso la function DATEPART para determinar la hora, pero si guardas ese dato en un campo separado como dices no sera necesario.

Código SQL [-]
    SELECT DATEPART(Hour,fecha) Hora, ISNULL(Lunes,0) Lunes, 
           ISNULL(Martes,0) Martes, 
           ISNULL(Miercoles,0) Miercoles, 
           ISNULL(Jueves,0) Jueves, 
           ISNULL(Viernes,0) Viernes, 
           ISNULL(Sabado,0) Sabado, 
           ISNULL(Domingo,0) Domingo FROM
        (
        SELECT fecha, CASE WHEN DATEPART(DW,fecha) = 1 THEN 'Domingo'
                    WHEN DATEPART(DW,fecha) = 2 THEN 'Lunes'
                    WHEN DATEPART(DW,fecha) = 3 THEN 'Martes'
                    WHEN DATEPART(DW,fecha) = 4 THEN 'Miercoles'
                    WHEN DATEPART(DW,fecha) = 5 THEN 'Jueves'
                    WHEN DATEPART(DW,fecha) = 6 THEN 'Viernes'
                    WHEN DATEPART(DW,fecha) = 7 THEN 'Sabado' END Dias,
                COALESCE(SUM(dt_total),0) Valor
                FROM registros  
        GROUP BY DATEPART(DW,fecha), fecha
        ) AS Datos 
    PIVOT (SUM(Valor) FOR Dias IN ([Lunes],[Martes],[Miercoles],[Jueves],[Viernes],[Sabado],[Domingo])) AS Matriz
ORDER BY DATEPART(Hour,fecha)
__________________
Al que no le gusta enseñar, no merece aprender...

Última edición por papote654 fecha: 17-01-2012 a las 02:03:24.
Responder Con Cita