Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Select anidados (https://www.clubdelphi.com/foros/showthread.php?t=7630)

Ignacio 21-02-2004 02:23:58

Select anidados
 
Hola

Les cuento el problema. Tengo una tabla "Cuotas", la cual está compuesta por los campos NumeroCTA, PlanCTA y FechaCTA. Otra tabla "Plan" con los campos NumeroPLN, ClientePLN y MontoPLN. En el campo MontoPLN se encuentra todo el importe del plan, y si lo divido por la cantidad de registros de la tabla "cuotas", obtengo el Importe de cada cuota. Necesito realizar una consulta con la siguiente forma.

Select NumeroCTA,
FechaCTA,
MontoPLN / (Select Count(*)
From Cuotas
Where PlanCTA=:NumeroDePlan)
as ImporteCTA
From Cuotas
Inner Join Plan on (NumeroPLN=PlanCTA)
Where NumeroPLN=:NumeroDePlan
Order by FechaCTA

Cabe aclarar que el código que pongo de ejemplo es una reducción del caso real. Lo mensiono para no intentar resolver lo de los importe de las cuotas de otra manera.
En realidad lo que necesito resolver es el uso de parámetros dentro de un select anidado porque el parametro del select externo funciona correctamente. Cuando reemplazo el parametro interno por una constante, todo funciona bien, eso me demuestra que el error está en el uso de parametros en el select interno (de todas maneras, no debe ser una constante sino una variable). Otro intento que hice fue reemplasar el parametro del select interno :NumeroDePlan por el campo NumeroPLN. En este caso el error es diferente pero error aun. Bueno, no quiero hacerles mas lio con mi explicación.
Desde ya, muchas gracias

orfeo 21-02-2004 03:00:21

Que yo sepa no se puede usar un subQuery como operando de operaciones matematicas (excepto que halla una funcion extendida que sea algo como getReal( subQuery SQL ) / 20) porque el subQuery devuelve una tabla, no un numero.


Lo que queres podrias hacerlo con procedimiento almacenados porque te permiten definir variables.

Si usas MySQL podes definir variables y luego usarlas en otras consultas como:

SELECT @a:=SUM(total)
from XXX

SELECT @a+4

guillotmarc 21-02-2004 19:38:16

¿ Que base de datos utilizas ?

En las que uso yo se puede indicar perfectamente un parámetro dentro de una subconsulta.

Saludos.

Ignacio 23-02-2004 14:23:29

La base de datos es Paradox

guillotmarc 23-02-2004 14:35:03

Hola.

Lo siento, no te puedo ayudar mucho puesto que nunca he utilizado Paradox (aunque me da la impresión, por lo que he podido ver en los Foros, que su soporte SQL es bastante limitado).

Prueba a comparar con el campo, en lugar de con un parámetro. Para evitar el error que te da en este caso, tienes que identificar sin ambiguedades a que campo te refieres, puesto que puede ser tanto al presente en la consulta externa como a la interna. Para evitar la ambiguedad tienes que utilizar Alias.

Ejplo :

Código:

Select NumeroCTA, FechaCTA,
    MontoPLN / (Select Count(*) From Cuotas C2 Where C1.PlanCTA=C2.PlanCTA) as ImporteCTA
From Cuotas C1
    Inner Join Plan on (NumeroPLN=PlanCTA)
Where NumeroPLN=:NumeroDePlan
Order by FechaCTA

NOTA : Esto lo soportarán la mayoría de Servidores SQL, pero desconozco si lo hará Paradox.

Saludos.

Ignacio 23-02-2004 16:33:30

Gracias Marc. Con los Alias funcionó perfectamente.


La franja horaria es GMT +2. Ahora son las 00:15:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi