Agrupar por día de la semana

10/10/2007 - 17:22 por Eclat | Informe spam
Muy buenas tardes de nuevo, a ver si me podéis orientar sobre si es
posible hacer en una consulta algo así, y cual sería para ello la forma
más óptima.

Tengo una tabla con id, fecha, origen, destino y me gustaría obtener una
consulta para saber para cuantas veces se repite un origen/destino un
determinado día de la semana. Umm, no sé si me explicaré bien, el
resultado que quiero obtener es el siguiente:

Ruta, lunes, martes, miércoles, jueves, viernes, sábado, domingo
Madrid/Barcelona, 3,2,5,6,3,1,0

Es decir, la ruta Madrid/Barcelona los lunes (entre unas determinadas
fechas) he hecho 3 viajes, los martes 2, los miércoles 5, los jueves...

He estado mirando el comando DatePart(w,Fecha) y con esto obtengo el día
de la semana (para mí el 1 es el lunes).

SELECT origen, destino, datepart(w,fecha) as Dia_Semana
FROM viajes
WHERE fecha between fecha1 and fecha2
GROUP BY origen, destino, Dia_Semana

Esta sentencia me devolvería una fila por cada combinación de día de la
semana y no es lo que quiero, querría en una sola fila todos esos datos.
¿Tendré que hacerlo con subconsultas dentro del SELECT?

Admito sugerencias, muchas gracias,
 

Leer las respuestas

#1 Alejandro Mesa
10/10/2007 - 18:02 | Informe spam
Eclat,

Has un PIVOT del resultado.

select
origen,
destino,
sum(case when dia_semana = 'Lunes' then 1 else 0) as Lunes,
...
sum(case when dia_semana = 'Domingo' then 1 else 0) as Domingo,
(
SELECT origen, destino, datepart(w,fecha) as Dia_Semana
FROM viajes
WHERE fecha between fecha1 and fecha2
GROUP BY origen, destino, Dia_Semana
) as t
group by
origen, destino
go


AMB


"Eclat" wrote:

Muy buenas tardes de nuevo, a ver si me podéis orientar sobre si es
posible hacer en una consulta algo así, y cual sería para ello la forma
más óptima.

Tengo una tabla con id, fecha, origen, destino y me gustaría obtener una
consulta para saber para cuantas veces se repite un origen/destino un
determinado día de la semana. Umm, no sé si me explicaré bien, el
resultado que quiero obtener es el siguiente:

Ruta, lunes, martes, miércoles, jueves, viernes, sábado, domingo
Madrid/Barcelona, 3,2,5,6,3,1,0

Es decir, la ruta Madrid/Barcelona los lunes (entre unas determinadas
fechas) he hecho 3 viajes, los martes 2, los miércoles 5, los jueves...

He estado mirando el comando DatePart(w,Fecha) y con esto obtengo el día
de la semana (para mí el 1 es el lunes).

SELECT origen, destino, datepart(w,fecha) as Dia_Semana
FROM viajes
WHERE fecha between fecha1 and fecha2
GROUP BY origen, destino, Dia_Semana

Esta sentencia me devolvería una fila por cada combinación de día de la
semana y no es lo que quiero, querría en una sola fila todos esos datos.
¿Tendré que hacerlo con subconsultas dentro del SELECT?

Admito sugerencias, muchas gracias,

Preguntas similares