Ayuda con consulta

18/04/2008 - 21:45 por CHAR72 | Informe spam
Hola decidida mi estructura de db, ahora quisiera "agrupar" mis registros
segun ejemplo

Num
1
2
3
4
7
8
9

Quisiera obtener:

Desde Hasta
1 4
7 8

y si eso no seria una operació n muy compleja y que sea lenta

Saludos y gracias

Carlos

Preguntas similare

Leer las respuestas

#6 Maxi
24/04/2008 - 19:51 | Informe spam
Carlos, no es recomendable usar funciones en los where del lado izquierdo,
esto no representa una consulta SARG y el uso de los indices de existir son
ineficientes


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Carlos M. Calvelo" escribió en el mensaje
news:
Hola Carlos,

On Apr 23, 10:38 pm, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
Pude resolver lo anterior pero como siempre como cuando no se entiende
algo... Resulta que en la tabla de inventario hay algunos que ya se
vendieron y los marco con un Venta_ID=x, o sea que del universo que
encuentra la sentencia que escribistes, necesito que filtre los que
Venta_ID=Null o 0 (los que no se vendieron)




Trata de hacerlo con un isnull(Venta_ID,0)=0 añadido
a todos los WHERE.
Que viene a ser lo mismo que decir que solo
los registors con venta_id null o 0 podrán jugar
este juego. :)

Asi:

select
a.Num as Desde,
(select min(Num)
from T b
where Num>=a.Num
and isnull(Venta_ID,0)=0
and not exists
(select * from T
where isnull(Venta_ID,0)=0
and num=b.num+1)) as Hasta
from T a
where isnull(Venta_ID,0)=0
and not exists (select * from T
where isnull(Venta_ID,0)=0
and num = a.num-1)

Esto no le he probado, pero como tengas muchos
registros va a ser un método bastante lento.

Espero te sirva.

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Maxi
24/04/2008 - 19:54 | Informe spam
Me olvide de un link para mas informacion

http://madhuottapalam.blogspot.com/...sargs.html


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Carlos M. Calvelo" escribió en el mensaje
news:
Hola Carlos,

On Apr 23, 10:38 pm, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
Pude resolver lo anterior pero como siempre como cuando no se entiende
algo... Resulta que en la tabla de inventario hay algunos que ya se
vendieron y los marco con un Venta_ID=x, o sea que del universo que
encuentra la sentencia que escribistes, necesito que filtre los que
Venta_ID=Null o 0 (los que no se vendieron)




Trata de hacerlo con un isnull(Venta_ID,0)=0 añadido
a todos los WHERE.
Que viene a ser lo mismo que decir que solo
los registors con venta_id null o 0 podrán jugar
este juego. :)

Asi:

select
a.Num as Desde,
(select min(Num)
from T b
where Num>=a.Num
and isnull(Venta_ID,0)=0
and not exists
(select * from T
where isnull(Venta_ID,0)=0
and num=b.num+1)) as Hasta
from T a
where isnull(Venta_ID,0)=0
and not exists (select * from T
where isnull(Venta_ID,0)=0
and num = a.num-1)

Esto no le he probado, pero como tengas muchos
registros va a ser un método bastante lento.

Espero te sirva.

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 Carlos M. Calvelo
24/04/2008 - 22:30 | Informe spam
On 24 apr, 19:51, "Maxi" wrote:
Carlos, no es recomendable usar funciones en los where del lado izquierdo,
esto no representa una consulta SARG y el uso de los indices de existir son
ineficientes




Gracias Maxi. Leeré también el link que me has dado detenidamente,

Espero que no te estés refiriendo a tener que poner
0=isnull(Venta_ID,0) en vez de isnull(Venta_ID,0)=0.
Porque sino alguien va a tener que llevarle las noticias a MS
de que a=b es equivalente a b=a, a>=b equivalente a b<=a, etc.
;-)

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida