Consulta

21/08/2003 - 00:22 por davud arias | Informe spam
una Consulta:

Tengo la estructura de esta dos tablas:

*Tabla Rangos:

RangoInicical RangoFin
.00 300.99
301.00 500.99
501.00 700.99
701.00 1000.99
1001.00 1500.99
1501.00 999999.99

*Tabla Cuentas

Cuenta Prestamo
0001 500
0002 700
0003 1100
0004 1200
0005 300

y quiero obtener los siguientes Consolidados

Rango Cuentas TotalPrestamo
.00 - 300.99 5 4500
301.00 - 500.99 6 8400
501.00 - 700.99 8 3200
701.00 - 1000.99 9 9700
1001.00 - 1500.99 4 50000
1501.00 - 999999.99 1 2500


como lo puedo hacer sin tener la necesidad de usar
cursores. Gracias

Preguntas similare

Leer las respuestas

#1 Javier Loria\(MVP\)
21/08/2003 - 20:39 | Informe spam
Hola:
Es mucho mas facil si nos posteas el codigo de las Tablas porque no
tenemos que asumir tanto, pero si es asi:
/* Codigo de Creacion */
CREATE TABLE Rangos
(
NumRango INT NOT NULL PRIMARY KEY,
RangoInicial NUMERIC(9,2) NOT NULL,
RangoFin NUMERIC(9,2) NOT NULL,
CONSTRAINT CH_InicialFinal
CHECK (RangoInicial<RangoFin)
)

INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(0, .00, 300.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(1,301.00, 500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(2, 501.00, 700.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(3,701.00, 1000.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(4,1001.00, 1500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(5,1501.00, 999999.99)

CREATE TABLE Cuentas(
CodigoCuenta CHAR(4) NOT NULL PRIMARY KEY,
Prestamo NUMERIC(9,2) NOT NULL
)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0001',500.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0002',700.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0003',1100.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0004',1200.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0005',300.0)

/* Fin de Codigo de Creacion */

Entonces creo que lo que se sirve es mas o menos esto:
/* Consulta Agrupada de Saldos */
SELECT CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin) AS Rango,
COUNT(*) AS Cuentas,
SUM(Prestamo) AS TotalPrestamo
FROM Rangos JOIN Cuentas
ON Rangos.RangoInicial<=Cuentas.Prestamo AND
Rangos.RangoFin>=Cuentas.Prestamo
GROUP BY CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin)
/* Fin de consulta Agrupada de Saldos */
Espero haber entendido lo que querias,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

davud arias escribio:
una Consulta:

Tengo la estructura de esta dos tablas:

*Tabla Rangos:

RangoInicical RangoFin
.00 300.99
301.00 500.99
501.00 700.99
701.00 1000.99
1001.00 1500.99
1501.00 999999.99

*Tabla Cuentas

Cuenta Prestamo
0001 500
0002 700
0003 1100
0004 1200
0005 300

y quiero obtener los siguientes Consolidados

Rango Cuentas TotalPrestamo
.00 - 300.99 5 4500
301.00 - 500.99 6 8400
501.00 - 700.99 8 3200
701.00 - 1000.99 9 9700
1001.00 - 1500.99 4 50000
1501.00 - 999999.99 1 2500


como lo puedo hacer sin tener la necesidad de usar
cursores. Gracias
Respuesta Responder a este mensaje
#2 david
21/08/2003 - 21:58 | Informe spam
Ahora si definitivamente me olvido de los
cursores...Gracias

Hola:
Es mucho mas facil si nos posteas el codigo de las


Tablas porque no
tenemos que asumir tanto, pero si es asi:
/* Codigo de Creacion */
CREATE TABLE Rangos
(
NumRango INT NOT NULL PRIMARY KEY,
RangoInicial NUMERIC(9,2) NOT NULL,
RangoFin NUMERIC(9,2) NOT NULL,
CONSTRAINT CH_InicialFinal
CHECK (RangoInicial<RangoFin)
)

INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(0, .00, 300.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(1,301.00, 500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(2, 501.00, 700.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(3,701.00, 1000.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(4,1001.00, 1500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(5,1501.00, 999999.99)

CREATE TABLE Cuentas(
CodigoCuenta CHAR(4) NOT NULL PRIMARY KEY,
Prestamo NUMERIC(9,2) NOT NULL
)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0001',500.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0002',700.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0003',1100.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0004',1200.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0005',300.0)

/* Fin de Codigo de Creacion */

Entonces creo que lo que se sirve es mas o menos esto:
/* Consulta Agrupada de Saldos */
SELECT CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin) AS


Rango,
COUNT(*) AS Cuentas,
SUM(Prestamo) AS TotalPrestamo
FROM Rangos JOIN Cuentas
ON Rangos.RangoInicial<=Cuentas.Prestamo AND
Rangos.RangoFin>=Cuentas.Prestamo
GROUP BY CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin)
/* Fin de consulta Agrupada de Saldos */
Espero haber entendido lo que querias,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

davud arias escribio:
una Consulta:

Tengo la estructura de esta dos tablas:

*Tabla Rangos:

RangoInicical RangoFin
.00 300.99
301.00 500.99
501.00 700.99
701.00 1000.99
1001.00 1500.99
1501.00 999999.99

*Tabla Cuentas

Cuenta Prestamo
0001 500
0002 700
0003 1100
0004 1200
0005 300

y quiero obtener los siguientes Consolidados

Rango Cuentas TotalPrestamo
.00 - 300.99 5 4500
301.00 - 500.99 6 8400
501.00 - 700.99 8 3200
701.00 - 1000.99 9 9700
1001.00 - 1500.99 4 50000
1501.00 - 999999.99 1 2500


como lo puedo hacer sin tener la necesidad de usar
cursores. Gracias




.

Respuesta Responder a este mensaje
#3 Miguel Egea
22/08/2003 - 09:23 | Informe spam
Hola javier, hoy has hecho tu buena obra del día, cursor matado ;-)

Saludos Cordiales
=Proxima reunión virtual sobre rendimiento.
Messenger:
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==

"david" escribió en el mensaje
news:033b01c3681e$a9392cf0$
Ahora si definitivamente me olvido de los
cursores...Gracias

>Hola:
> Es mucho mas facil si nos posteas el codigo de las
Tablas porque no
>tenemos que asumir tanto, pero si es asi:
>/* Codigo de Creacion */
>CREATE TABLE Rangos
> (
> NumRango INT NOT NULL PRIMARY KEY,
> RangoInicial NUMERIC(9,2) NOT NULL,
> RangoFin NUMERIC(9,2) NOT NULL,
> CONSTRAINT CH_InicialFinal
> CHECK (RangoInicial<RangoFin)
> )
>
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(0, .00, 300.99)
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(1,301.00, 500.99)
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(2, 501.00, 700.99)
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(3,701.00, 1000.99)
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(4,1001.00, 1500.99)
>INSERT Rangos(NumRango, RangoInicial, RangoFin)
>VALUES(5,1501.00, 999999.99)
>
>CREATE TABLE Cuentas(
> CodigoCuenta CHAR(4) NOT NULL PRIMARY KEY,
> Prestamo NUMERIC(9,2) NOT NULL
>)
>INSERT Cuentas(CodigoCuenta,Prestamo)
>VALUES ('0001',500.0)
>INSERT Cuentas(CodigoCuenta,Prestamo)
>VALUES ('0002',700.0)
>INSERT Cuentas(CodigoCuenta,Prestamo)
>VALUES ('0003',1100.0)
>INSERT Cuentas(CodigoCuenta,Prestamo)
>VALUES ('0004',1200.0)
>INSERT Cuentas(CodigoCuenta,Prestamo)
>VALUES ('0005',300.0)
>
>/* Fin de Codigo de Creacion */
>
>Entonces creo que lo que se sirve es mas o menos esto:
>/* Consulta Agrupada de Saldos */
>SELECT CONVERT(VARCHAR(10),Rangos.RangoInicial)+
> ' - '+
> CONVERT(VARCHAR(10),Rangos.RangoFin) AS
Rango,
> COUNT(*) AS Cuentas,
> SUM(Prestamo) AS TotalPrestamo
>FROM Rangos JOIN Cuentas
> ON Rangos.RangoInicial<=Cuentas.Prestamo AND
> Rangos.RangoFin>=Cuentas.Prestamo
>GROUP BY CONVERT(VARCHAR(10),Rangos.RangoInicial)+
> ' - '+
> CONVERT(VARCHAR(10),Rangos.RangoFin)
>/* Fin de consulta Agrupada de Saldos */
>Espero haber entendido lo que querias,
>
>
>Javier Loria
>Costa Rica (MVP)
>Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>que pueda ser copiado y pegado al Query Analizer.
>La version de SQL y Service Pack tambien ayuda.
>
>davud arias escribio:
>> una Consulta:
>>
>> Tengo la estructura de esta dos tablas:
>>
>> *Tabla Rangos:
>>
>> RangoInicical RangoFin
>> .00 300.99
>> 301.00 500.99
>> 501.00 700.99
>> 701.00 1000.99
>> 1001.00 1500.99
>> 1501.00 999999.99
>>
>> *Tabla Cuentas
>>
>> Cuenta Prestamo
>> 0001 500
>> 0002 700
>> 0003 1100
>> 0004 1200
>> 0005 300
>>
>> y quiero obtener los siguientes Consolidados
>>
>> Rango Cuentas TotalPrestamo
>> .00 - 300.99 5 4500
>> 301.00 - 500.99 6 8400
>> 501.00 - 700.99 8 3200
>> 701.00 - 1000.99 9 9700
>> 1001.00 - 1500.99 4 50000
>> 1501.00 - 999999.99 1 2500
>>
>>
>> como lo puedo hacer sin tener la necesidad de usar
>> cursores. Gracias
>
>
>.
>
Respuesta Responder a este mensaje
#4 Javier Loria\(MVP\)
22/08/2003 - 15:21 | Informe spam
Como los boyscouts!.


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Miguel Egea escribio:
Hola javier, hoy has hecho tu buena obra del día, cursor matado ;-)


"david" escribió en el mensaje
news:033b01c3681e$a9392cf0$
Ahora si definitivamente me olvido de los
cursores...Gracias

Hola:
Es mucho mas facil si nos posteas el codigo de las


Tablas porque no
tenemos que asumir tanto, pero si es asi:
/* Codigo de Creacion */
CREATE TABLE Rangos
(
NumRango INT NOT NULL PRIMARY KEY,
RangoInicial NUMERIC(9,2) NOT NULL,
RangoFin NUMERIC(9,2) NOT NULL,
CONSTRAINT CH_InicialFinal
CHECK (RangoInicial<RangoFin)
)

INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(0, .00, 300.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(1,301.00, 500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(2, 501.00, 700.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(3,701.00, 1000.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(4,1001.00, 1500.99)
INSERT Rangos(NumRango, RangoInicial, RangoFin)
VALUES(5,1501.00, 999999.99)

CREATE TABLE Cuentas(
CodigoCuenta CHAR(4) NOT NULL PRIMARY KEY,
Prestamo NUMERIC(9,2) NOT NULL
)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0001',500.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0002',700.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0003',1100.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0004',1200.0)
INSERT Cuentas(CodigoCuenta,Prestamo)
VALUES ('0005',300.0)

/* Fin de Codigo de Creacion */

Entonces creo que lo que se sirve es mas o menos esto:
/* Consulta Agrupada de Saldos */
SELECT CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin) AS


Rango,
COUNT(*) AS Cuentas,
SUM(Prestamo) AS TotalPrestamo
FROM Rangos JOIN Cuentas
ON Rangos.RangoInicial<=Cuentas.Prestamo AND
Rangos.RangoFin>=Cuentas.Prestamo
GROUP BY CONVERT(VARCHAR(10),Rangos.RangoInicial)+
' - '+
CONVERT(VARCHAR(10),Rangos.RangoFin)
/* Fin de consulta Agrupada de Saldos */
Espero haber entendido lo que querias,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

davud arias escribio:
una Consulta:

Tengo la estructura de esta dos tablas:

*Tabla Rangos:

RangoInicical RangoFin
.00 300.99
301.00 500.99
501.00 700.99
701.00 1000.99
1001.00 1500.99
1501.00 999999.99

*Tabla Cuentas

Cuenta Prestamo
0001 500
0002 700
0003 1100
0004 1200
0005 300

y quiero obtener los siguientes Consolidados

Rango Cuentas TotalPrestamo
.00 - 300.99 5 4500
301.00 - 500.99 6 8400
501.00 - 700.99 8 3200
701.00 - 1000.99 9 9700
1001.00 - 1500.99 4 50000
1501.00 - 999999.99 1 2500


como lo puedo hacer sin tener la necesidad de usar
cursores. Gracias




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