none
Consulta de Horarios en sqlserver RRS feed

  • Pregunta

  • hola, tengo dos tablas con los siguientes datos:

    tabla horarios

    idhorario int

    dia=lunes,martes, miercoles,etc varchar

    horainicio=datetime

    horafin=datetime

    tabla actividades

    idactividad int

    nombre varchar

    lo que necesito es armar una consulta que me devuelva

    dia         actividad   horainicio   horafin

    lunes      aerobics    20hs          21hs

    martes   xxxxx         xxx           xxx

    etc.

    muchas gracias

     

    miércoles, 19 de mayo de 2010 7:32

Respuestas

  • Hola.

    Siendo así, no parece muy complicado. Lo único es la ordenación por el día de la semana, algo que puedes conseguir con una cte.

    ; with Semana (Num, Dia) as
    (
    select cast(1 as tinyint) as Num, cast('Lunes' as varchar(10)) as Dia
    union all
    select 2 as Num, 'Martes' as Dia
    union all
    select 3 as Num, 'Miércoles' as Dia
    union all
    select 4 as Num, 'Jueves' as Dia
    union all
    select 5 as Num, 'Viernes' as Dia
    union all
    select 6 as Num, 'Sábado' as Dia
    union all
    select 7 as Num, 'Domingo' as Dia
    )
    
    select 
    	S.Dia,
    	A.Nombre as Actividad,
    	H.HoraInicio,
    	H.HoraFin
    from 
    	Semana S inner join
    	Horarios H on S.Dia = H.Dia inner join
    	Actividades A on H.IdActividad = A.IdActividad
    order by S.Num, H.HoraInicio


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 19 de mayo de 2010 20:59
    Moderador

Todas las respuestas

  • ¿Y dónde indicas qué horarios tiene cada actividad? Te falta alguna tabla por ahí, ¿no crees?
    miércoles, 19 de mayo de 2010 7:40
  • si la tabla horarios tiene el campo id_actividad int de donde saco el nombre de la actividad y la tabla horarios tiene el campo hora_inicio y horafin que justamente tiene la hora de inicio y la hora de fin.
    miércoles, 19 de mayo de 2010 19:19
  • Hola.

    Siendo así, no parece muy complicado. Lo único es la ordenación por el día de la semana, algo que puedes conseguir con una cte.

    ; with Semana (Num, Dia) as
    (
    select cast(1 as tinyint) as Num, cast('Lunes' as varchar(10)) as Dia
    union all
    select 2 as Num, 'Martes' as Dia
    union all
    select 3 as Num, 'Miércoles' as Dia
    union all
    select 4 as Num, 'Jueves' as Dia
    union all
    select 5 as Num, 'Viernes' as Dia
    union all
    select 6 as Num, 'Sábado' as Dia
    union all
    select 7 as Num, 'Domingo' as Dia
    )
    
    select 
    	S.Dia,
    	A.Nombre as Actividad,
    	H.HoraInicio,
    	H.HoraFin
    from 
    	Semana S inner join
    	Horarios H on S.Dia = H.Dia inner join
    	Actividades A on H.IdActividad = A.IdActividad
    order by S.Num, H.HoraInicio


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 19 de mayo de 2010 20:59
    Moderador
  • Aqui tienes el script y la consulta que podria resolver el problema:

    create

     

    table HORARIOS

    (

    idHorario

    int identity(1,1) primary key,

    dia

    varchar(100) not null,

    horainicio

    datetime not null,

    horafin

    datetime not null,

    idActividad

    int not null

    )

    go

    create

     

    table ACTIVIDADES

    (

    idActividad

    int identity(1,1) primary key,

    nombre

    varchar(100) not null

    )

     

    insert

     

    into ACTIVIDADES values('aerobic'),('pilates'),('defensa personal')

    insert

     

    into HORARIOS values('lunes','2010-01-01 10:00:00','2010-01-01 11:00:00',1),

     

     

    ('Martes','2010-01-01 10:00:00','2010-01-01 11:00:00',2),

     

     

    ('Miercoles','2010-01-01 10:00:00','2010-01-01 11:00:00',3)

     

    --consulta que resuelve el problema

    select

     

    dia, nombre [Actividad], cast(DATEPART(hour,horainicio) as varchar)+'hs' horaInicio, cast(DATEPART(hour,horafin) as varchar)+'hs' horafin

    from

     

    HORARIOS h join ACTIVIDADES a on h.idActividad=a.idActividad

    jueves, 20 de mayo de 2010 8:55