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:
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
Respuesta Responder a este mensaje
#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:
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



Respuesta Responder a este mensaje
#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:
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



Respuesta Responder a este mensaje
#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:
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 messagenews:



> 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- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#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:
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
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida