Como crear una tabla temporal

03/07/2007 - 23:40 por Carlos | Informe spam
Tengo los sig datos en un registro de una tabla

id_Cliente Mensualidad plazo_pago fecha_movimiento
548 500.00 10 04/03/2007

A partir de este registro, necesito crear una tabla con los siguientes
datos, que representarian las fechas de cada abono

Fecha Pago Meses Transcurridos
04/04/2007 1
04/05/2007 2
04/06/2007 3
04/07/2007 4
04/08/2007 5
04/09/2007 6
04/10/2007 7
04/11/2007 8
04/12/2007 9
04/01/2008 10

Espero puedan darme una idea de como crear esta tabla temporal

gracias

Preguntas similare

Leer las respuestas

#1 Jesús López
04/07/2007 - 00:09 | Informe spam
En SQL Server 2005 se podría hacer así:

DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

;WITH CTE(FechaPago, MesesTranscurridos)
AS
(
SELECT DATEADD(m, 1, @FechaMovimiento) AS FechaPago,
1 AS MesesTranscurridos
UNION ALL
SELECT DATEADD(m, 1, FechaPago) AS FechaPago,
MesesTranscurridos + 1 AS MesesTranscurridos
FROM CTE
WHERE MesesTranscurridos < @PlazoPago

) SELECT * FROM CTE

Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Carlos" escribió en el mensaje
news:
Tengo los sig datos en un registro de una tabla

id_Cliente Mensualidad plazo_pago fecha_movimiento
548 500.00 10 04/03/2007

A partir de este registro, necesito crear una tabla con los siguientes
datos, que representarian las fechas de cada abono

Fecha Pago Meses Transcurridos
04/04/2007 1
04/05/2007 2
04/06/2007 3
04/07/2007 4
04/08/2007 5
04/09/2007 6
04/10/2007 7
04/11/2007 8
04/12/2007 9
04/01/2008 10

Espero puedan darme una idea de como crear esta tabla temporal

gracias



Respuesta Responder a este mensaje
#2 Jesús López
04/07/2007 - 00:29 | Informe spam
Otra forma, la cual también sirve para SQL Server 2000, requiere disponer de
una tabla de números. Esta tabla de números sólo hay que rellenarla una vez,
así que no importa mucho si tarda un poco. Por ejemplo podríamos crear una
tabla de números y rellenarla con los primeros 10000 números así:

CREATE TABLE Numeros
(
Numero int IDENTITY(1,1) PRIMARY KEY
)

SET NOCOUNT ON
DECLARE @i int
SET @i = 0
WHILE @i < 10000
BEGIN
INSERT INTO Numeros DEFAULT VALUES
SET @i = @i + 1
END
SET NOCOUNT OFF


Luego podemos usar la tabla de números para generar los movimientos de esta
manera:


DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

SELECT DATEADD(m, N.Numero, @FechaMovimiento) AS FechaPago,
N.Numero AS MesesTranscurridos
FROM (SELECT @FechaMovimiento AS FechaMovimiento) AS FM
CROSS JOIN Numeros N
WHERE N.Numero <= @PlazoPago




Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Carlos" escribió en el mensaje
news:
Tengo los sig datos en un registro de una tabla

id_Cliente Mensualidad plazo_pago fecha_movimiento
548 500.00 10 04/03/2007

A partir de este registro, necesito crear una tabla con los siguientes
datos, que representarian las fechas de cada abono

Fecha Pago Meses Transcurridos
04/04/2007 1
04/05/2007 2
04/06/2007 3
04/07/2007 4
04/08/2007 5
04/09/2007 6
04/10/2007 7
04/11/2007 8
04/12/2007 9
04/01/2008 10

Espero puedan darme una idea de como crear esta tabla temporal

gracias



Respuesta Responder a este mensaje
#3 Jesús López
04/07/2007 - 00:38 | Informe spam
Bahh, se me ha ido la olla ...

Con este código es suficiente, no es necesario el CROSS JOIN:

DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

SELECT DATEADD(m, N.Numero, @FechaMovimiento) AS FechaPago,
N.Numero AS MesesTranscurridos
FROM Numeros N
WHERE N.Numero <= @PlazoPago


Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Jesús López" escribió en el mensaje
news:%
Otra forma, la cual también sirve para SQL Server 2000, requiere disponer
de una tabla de números. Esta tabla de números sólo hay que rellenarla una
vez, así que no importa mucho si tarda un poco. Por ejemplo podríamos
crear una tabla de números y rellenarla con los primeros 10000 números
así:

CREATE TABLE Numeros
(
Numero int IDENTITY(1,1) PRIMARY KEY
)

SET NOCOUNT ON
DECLARE @i int
SET @i = 0
WHILE @i < 10000
BEGIN
INSERT INTO Numeros DEFAULT VALUES
SET @i = @i + 1
END
SET NOCOUNT OFF


Luego podemos usar la tabla de números para generar los movimientos de
esta manera:


DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

SELECT DATEADD(m, N.Numero, @FechaMovimiento) AS FechaPago,
N.Numero AS MesesTranscurridos
FROM (SELECT @FechaMovimiento AS FechaMovimiento) AS FM
CROSS JOIN Numeros N
WHERE N.Numero <= @PlazoPago




Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Carlos" escribió en el mensaje
news:
Tengo los sig datos en un registro de una tabla

id_Cliente Mensualidad plazo_pago fecha_movimiento
548 500.00 10 04/03/2007

A partir de este registro, necesito crear una tabla con los siguientes
datos, que representarian las fechas de cada abono

Fecha Pago Meses Transcurridos
04/04/2007 1
04/05/2007 2
04/06/2007 3
04/07/2007 4
04/08/2007 5
04/09/2007 6
04/10/2007 7
04/11/2007 8
04/12/2007 9
04/01/2008 10

Espero puedan darme una idea de como crear esta tabla temporal

gracias







Respuesta Responder a este mensaje
#4 Carlos
04/07/2007 - 02:34 | Informe spam
Muchas gracias

Nunca me hubiera imaginado ese tipo de instrucciones,


"Jesús López" escribió en el mensaje
news:%
Bahh, se me ha ido la olla ...

Con este código es suficiente, no es necesario el CROSS JOIN:

DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

SELECT DATEADD(m, N.Numero, @FechaMovimiento) AS FechaPago,
N.Numero AS MesesTranscurridos
FROM Numeros N
WHERE N.Numero <= @PlazoPago


Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Jesús López" escribió en el mensaje
news:%
Otra forma, la cual también sirve para SQL Server 2000, requiere disponer
de una tabla de números. Esta tabla de números sólo hay que rellenarla
una vez, así que no importa mucho si tarda un poco. Por ejemplo podríamos
crear una tabla de números y rellenarla con los primeros 10000 números
así:

CREATE TABLE Numeros
(
Numero int IDENTITY(1,1) PRIMARY KEY
)

SET NOCOUNT ON
DECLARE @i int
SET @i = 0
WHILE @i < 10000
BEGIN
INSERT INTO Numeros DEFAULT VALUES
SET @i = @i + 1
END
SET NOCOUNT OFF


Luego podemos usar la tabla de números para generar los movimientos de
esta manera:


DECLARE @FechaMovimiento datetime
DECLARE @PlazoPago int

SELECT @FechaMovimiento = '20070304', @PlazoPago = 10

SELECT DATEADD(m, N.Numero, @FechaMovimiento) AS FechaPago,
N.Numero AS MesesTranscurridos
FROM (SELECT @FechaMovimiento AS FechaMovimiento) AS FM
CROSS JOIN Numeros N
WHERE N.Numero <= @PlazoPago




Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"Carlos" escribió en el mensaje
news:
Tengo los sig datos en un registro de una tabla

id_Cliente Mensualidad plazo_pago fecha_movimiento
548 500.00 10 04/03/2007

A partir de este registro, necesito crear una tabla con los siguientes
datos, que representarian las fechas de cada abono

Fecha Pago Meses Transcurridos
04/04/2007 1
04/05/2007 2
04/06/2007 3
04/07/2007 4
04/08/2007 5
04/09/2007 6
04/10/2007 7
04/11/2007 8
04/12/2007 9
04/01/2008 10

Espero puedan darme una idea de como crear esta tabla temporal

gracias











email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida