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

Preguntas similare

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:
Mostrar la cita
#2 Maxi
17/03/2007 - 15:39 | Informe spam
Hola, en sql2000 no se oermiten este tipo de operaciones pero en 2005 si,

select top(@variable) from tabla

Si usas 2000 o bien tenes que hacer lo que te comentaron en el post antrior
o sino usar SQL-dinamico sp_executesql o sino tambien podes trabajar con la
sentencia set rowcount


Saludos

[Microsoft MVP SQL Server]
SQLTOTALConsulting - Servicios y consultoria de SQLServer
www.sqlgurus.org
Buenos Aires - Argentina
http://msmvps.com/blogs/maxiaccotto/
"Vicente Flich" (quitar 99)> wrote in message
news:
Mostrar la cita
#3 Jose Mariano Alvarez
17/03/2007 - 16:47 | Informe spam
Prueba esto

SELECT *
FROM FACTURAS
WHERE CLIENTE = '002'
ORDER BY CLIENTE
union all
SELECT TOP 1 *
FROM FACTURAS
WHERE CLIENTE > '002'
ORDER BY CLIENTE




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Vicente Flich" (quitar 99)> wrote in message
news:
Mostrar la cita
#4 dncontin
17/03/2007 - 17:05 | Informe spam
cual es el sentido de ordenar un conjunto de resultados por un campo
que tiene un unico valor??
WHERE CLIENTE = '002'
ORDER BY CLIENTE

saludos!
diego

On 17 mar, 12:47, "Jose Mariano Alvarez"
wrote:
Mostrar la cita
#5 Vicente Flich
17/03/2007 - 18:18 | Informe spam
No se me habia ocurrido con UNION. Gracias.

Saludos,
Vicente Flich


"DNC" escribió en el mensaje
news:
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:
Mostrar la cita
la
Mostrar la cita
determinado
Mostrar la cita
aunque
Mostrar la cita
Ads by Google
Search Busqueda sugerida