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)