Problema con consulta de actualización

10/04/2008 - 12:54 por Hugo Gsell | Informe spam
Tengo 2 tablas Turnos y Feriados.
Resumiendo y tomando lo que nos interesa...
Turnos tiene un campo FechaHoraTurno (var tipo datetime) y un campo estado
(int).
Feriados tiene un campo FechaHoraFeriadoDesde y FechaHoraFeriadoHasta.
Conceptualmente tengo en la tabla Turnos todos los días de un periodo en el
que tengo turnos a asignar y en la tabla Feriados los días y rango de
horarios 'que si es feriado no se atiende'.
Necesito realizar una consulta que resuelva lo siguiente:
poner el campo ESTADO de la tabla Turnos con valor 2 si la FechaHoraTurno de
esta turno se halla comprendido entre algun registro de
FechaHoraFeriadoDesde y FechaHoraFeriadoHasta. En cualquier otro caso poner
valor 1.
Ejemplo
TABLA Turnos
FechaHoraTurno Estado
01/04/2008 10:00 0
01/04/2008 11:00 0
01/04/2008 15:00 0

TABLA Feriado
FechaHoraFeriadoDesde | FechaHoraFeriadoHasta.
01/04/2008 12:00 01/04/2008 21:00
15/05/2008 15:00 15/05/2008 21:00
02/08/2008 12:00 02/08/2008 21:00

La tabla Turnos quedaría:
TABLA Turnos
FechaHoraTurno Estado
01/04/2008 10:00 1
01/04/2008 11:00 1
01/04/2008 15:00 2 ESTE ES EL REGISTRO QUE SE HALLA COMPRENDIDO EN UN
Registro fecha/hora de feriado
...

Espero que se haya entendido.
Espero puedan ayudarme.

Hugo A. Gsell

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
10/04/2008 - 13:23 | Informe spam
Hola Hugo,

On Thu, 10 Apr 2008 07:54:48 -0300, "Hugo Gsell"
wrote:

Mostrar la cita
¿Y por que no lo haces tu mismo?

¿Con que problemas te has encontrado?


Saludos
Alfredo
#2 Hugo Gsell
10/04/2008 - 16:07 | Informe spam
es que no estoy entendiendo como hacerlo.

"Alfredo Novoa" escribió en el mensaje
news:
Mostrar la cita
#3 Carlos M. Calvelo
10/04/2008 - 16:37 | Informe spam
On 10 apr, 16:07, "Hugo Gsell" wrote:
Mostrar la cita
Es muy sencillo Hugo.

update turnos
set estado case when exists(select * from feriado
where fechahoraturno between fechahoraferiadodesde
and fechahoraferiadohasta)
then 2
else 1
end

Saludos,
Carlos
#4 Hugo Gsell
30/04/2008 - 17:56 | Informe spam
Gracias

Hugo


"Carlos M. Calvelo" escribió en el mensaje
news:
Mostrar la cita
#5 Carlos M. Calvelo
30/04/2008 - 18:09 | Informe spam
Hola Hugo,

On 30 apr, 17:56, "Hugo Gsell" wrote:
Mostrar la cita
De nada. Pues ya hace tiempo!
Tu acabas de volver de unas vacaciones? :)

Reacciono para añadir que con la solución que te dí tienes
redundancia. Cada vez que cambie algo en la tabla feriado
tendrás que hacer un UPDATE en la tabla turnos.

Quizás sea mejor olvidarse de la columna estado en la
tabla turnos y calcularla siempre, con la misma expresión.

Asi:

select
FechaHoraTurno,
case
when exists(select * from feriado
where fechahoraturno between fechahoraferiadodesde
and fechahoraferiadohasta)
then 2
else 1
end as estado
from turnos

Esta consulta tambien la puedes meter en una vista y entonces
puedes hacer algo como

select * from TurnosConEstado
(donde TurnosConEstado es el nombre de tu vista)

Espero no te haya confundido mas.

Saludos,
Carlos
Ads by Google
Search Busqueda sugerida