Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consultas anidadas y agrupadas (https://www.clubdelphi.com/foros/showthread.php?t=77338)

Panasys 16-01-2012 16:39:47

Consultas anidadas y agrupadas
 
Hola Amigos.. el tema es el siguiente, tengo que sumar la cantidad de registros de un campo VALOR, la tabla tiene los campos FECHA, HORA y VALOR, ahora necesito todos los valores hora a hora dia a dia, mostrarlos en un form en una columna los dias y en las filas los valores de las 24 horas de forma individual, hay horas que suman 20 otras 30 otras 50.

Arranque con algo asi:

Código SQL [-]
Select Fecha, Sum(Valor) AS NuevoValor From registros 
where Fecha between "2012-01-01" and "2012-01-30" Group By Fecha

Pero me suma todo, me muestra dia por dia, pero necesito agrupado por dia pero que me muestra hora por hora, si utilizo el extract me muestra hora por hora pero las 24 horas sin importar los dias. Alguien me tira un hilo? o como deberia buscar la solucion (ya intente google, clubdelphi) pero si ya esta contestado por donde buscar... gracias y si la solucion es sencilla disculpen la pregunta y las molestias!

:)

saludos

papote654 17-01-2012 01:59:23

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)


La franja horaria es GMT +2. Ahora son las 22:53:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi