SQL Server - Se puede hacer con una vista?

 
Vista:

Se puede hacer con una vista?

Publicado por Rokefeler (22 intervenciones) el 30/01/2012 16:38:49
Hola,

Tengo una tabla que contiene tres campos. Fecha inicio, fecha de fin e importe. Lo que representa es el importe a aplicar entre las fechas. Lo que quiero es crear una nueva vista y/o tabla temporal que ponga tantas fechas como días haya entre la fecha de fin y la de inicio y con ese importe. Es decir, si ponemos el siguiente ejemplo.

Fecha inicio: 01/03/2011
Fecha fin: 04/03/2011
Importe: 100

Me tendría que generar

Fecha: 01/03/2011, importe = 100
Fecha: 02/03/2011, importe = 100
Fecha: 03/03/2011, improte = 100
Fecha: 04/03/2011, importe = 100

Lo que estoy haciendo es creando una tabla nueva usando cursores, pero la verdad es que es muy lento. ¿A alguien se le ocurre alguna manera de hacerlo sin cursores?.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Se puede hacer con una vista?

Publicado por Isaias (4557 intervenciones) el 30/01/2012 17:58:29
Y no te sirve un WHILE para hacer el ciclo, supongo que lo quieres para aplicar esos pagos, no??

O bien, sacar un DATEDIFF de DIAS entre las fechas, te da la cantidad de dias y lo multiplicas por la cantidad a abonar....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se puede hacer con una vista?

Publicado por Pedro (80 intervenciones) el 30/01/2012 20:59:20
Hola

No logro entender cual es la necesida de crear una vista o tabla temporal,
Cuando uno modela de esta forma, generalmente es para evitar tener todos los dias en la base y luego recuperar el valor con una fecha determinada con un between en el where
Si pudiera entender el uso podria analizarte una solucion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se puede hacer con una vista?

Publicado por Rokefeler (22 intervenciones) el 31/01/2012 09:28:50
Hola,

No me sirve el while y, ahora trataré de explicar mejor para que lo necesito. Se trata de una aplicación hotelera, en la cual se le pone para una determinada reserva la fecha de inicio y la fecha de fin , junto con el importe. Es decir, a la tabla anterior habría que añadir un nuevo campo que sería el número de reserva y 7 campos más que van desde Lunes a Domingo (boleanos) que indican si el precio se aplica en ese día de la semana. Lo que quiero saber es el precio diario de la reserva, pero teniendo en cuenta que para la misma reserva, puede haber más de 1 línea. Por ejemplo:

Reserva: 1
Fecha inicio: 01/01/2011
Fecha fin: 03/01/2011
Lunes: 1, Martes: 1, Miercoles: 1, Jueves:1, Viernes: 1, Sabado:1, Domingo 1
Importe: 100

Reserva 1
Fecha inicio: 04/01/2011
Fecha fin: 07/01/2011
Lunes: 1, Martes: 1, Miercoles: 1, Jueves: 1, Viernes: 1, Sabado: 1, Domingo 1
Importe 200

Entonces el resultado debería ser algo así

Reserva: 1, Fecha: 01/01/2011, Importe:100
Reserva: 1, Fecha: 02/01/2011, Importe: 100
Reserva 1, Fecha: 03/01/2011, Importe 100
Reserva 1, Fecha: 04/01/2011, Importe 200
Reserva 1, Fecha: 05/01/2011, importe 200
Reserva 1, Fecha: 06/01/2011, importe 200
Reserva 1, Fecha: 07/01/2011, importe 200

No puede modificar la base de datos original. ¿Alguna ide para que el proceso sea rápido sin cursores?.

Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se puede hacer con una vista?

Publicado por Pedro (80 intervenciones) el 31/01/2012 15:49:09
Hola
Asi como lo estas planteando , lo mas logico es crear una tabla, esto te permite crear los indices y hacer el proceso rapido como lo queres
Si no podes tocar la BD original , crea una base alternativa y califica la tabla y listo
Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se puede hacer con una vista?

Publicado por Rokefeler (22 intervenciones) el 31/01/2012 16:08:40
Gracias a todos... Al final lo conseguí. Lo que hice fue el siguiente código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SET @Fecha = @Fechainicio
WHILE @Fecha <= @Fechafinal
BEGIN
  INSERT INTO [Valoracion Diaria Reserva]
  SELECT  @Fecha, [Codigo concepto], [No_ Reserva], [Precio Diario sin impuestos]
		 FROM TablaConRangos
 		 WHERE @Fecha BETWEEN [Fecha inicio] AND [Fecha fin] AND
 		      (DATEPART(WEEKDAY,@Fecha) = 1 AND Lunes     = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 2 AND Martes    = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 3 AND Miercoles = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 4 AND Jueves    = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 5 AND Viernes   = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 6 AND Sabado    = 1  OR
               DATEPART(WEEKDAY,@Fecha) = 7 AND Domingo   = 1)
  SET @Fecha+=1
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar