Consulta con clausula TOP variable

17/03/2007 - 13:24 por Vicente Flich | Informe spam
Hola de nuevo a todos:

Necesito resolver un problema mas... Desde mi aplicacion ODBC quiero hacer
un select con una clausula TOP variable dependiendo de otra consulta.

Me explico mejor con un ejemplo, de una tabla de facturas por ejemplo, en la
que pueden haber logicamente varios registros de un mismo cliente. Pues
quiero recuperar con un select todas las facturas de un cliente determinado
mas 1 (la del siguiente cliente ordenado por cliente. Por ejemplo de los
siguientes registros:

CLIENTE,FACTURA
001,fra.1
001,fra.2
002,fra16
002,fra3
002,fra22
004,fra25
004,fra33

Quiero un select para recuperar los registros del cliente 002 ademas de la
primera factura del siguiente cliente, osea:

002,fra16
002,fra3
002,fra22
004,fra25

He intentado algo como:

SELECT *
TOP((SELECT COUNT(*)FROM FACTURAS WHERE CLIENTE='002') + 1)
FROM FACTURAS
WHERE CLIENTE>='002'
ORDER BY CLIENTE

Seguramente sea una burrada, pero se entiende no? Por supuesto no funciona
:-(

Finalmente, lo he resuelto con 2 llamadas al ODBC desde mi aplicacion:
primero saco el count con:
SELECT COUNT(*) FROM FACTURAS WHERE CLIENTE='002'
y luego otra llamada a ODBC con:
SELECT TOP(n+1)FROM FACTURAS WHERE CLIENTE>='002' ORDER BY CLIENTE

Asi si que funciona logicamente, pero al ser 2 llamadas por ODBC va mas
lento, por eso busco una sentencia SELECT que lo haga todo a la vez...

Otra posibilidad que se me ocurre es desarrollar un stored procedure, aunque
preferiria la sentencia SELECT.

¿Alguien puede orientarme?

Saludos,
Vicente Flich
 

Leer las respuestas

#1 DNC
17/03/2007 - 14:43 | Informe spam
seria algo como

select * from facturas where cliente='002'
union all
select top 1 * from facturas where cliente>'002'

saludos!!




On 17 mar, 09:24, "Vicente Flich" (quitar 99)>
wrote:
Hola de nuevo a todos:

Necesito resolver un problema mas... Desde mi aplicacion ODBC quiero hacer
un select con una clausula TOP variable dependiendo de otra consulta.

Me explico mejor con un ejemplo, de una tabla de facturas por ejemplo, en la
que pueden haber logicamente varios registros de un mismo cliente. Pues
quiero recuperar con un select todas las facturas de un cliente determinado
mas 1 (la del siguiente cliente ordenado por cliente. Por ejemplo de los
siguientes registros:

CLIENTE,FACTURA
001,fra.1
001,fra.2
002,fra16
002,fra3
002,fra22
004,fra25
004,fra33

Quiero un select para recuperar los registros del cliente 002 ademas de la
primera factura del siguiente cliente, osea:

002,fra16
002,fra3
002,fra22
004,fra25

He intentado algo como:

SELECT *
TOP((SELECT COUNT(*)FROM FACTURAS WHERE CLIENTE='002') + 1)
FROM FACTURAS
WHERE CLIENTE>='002'
ORDER BY CLIENTE

Seguramente sea una burrada, pero se entiende no? Por supuesto no funciona
:-(

Finalmente, lo he resuelto con 2 llamadas al ODBC desde mi aplicacion:
primero saco el count con:
SELECT COUNT(*) FROM FACTURAS WHERE CLIENTE='002'
y luego otra llamada a ODBC con:
SELECT TOP(n+1)FROM FACTURAS WHERE CLIENTE>='002' ORDER BY CLIENTE

Asi si que funciona logicamente, pero al ser 2 llamadas por ODBC va mas
lento, por eso busco una sentencia SELECT que lo haga todo a la vez...

Otra posibilidad que se me ocurre es desarrollar un stored procedure, aunque
preferiria la sentencia SELECT.

¿Alguien puede orientarme?

Saludos,
Vicente Flich

Preguntas similares