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

#1 Carlos M. Calvelo
18/04/2008 - 22:31 | Informe spam
Hola,

On 18 apr, 21:45, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
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



Seguro que quieres decir: Desde 7, Hasta 9


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



Eso dependerá mucho de la cantidad de registros en la tabla.
Puedes probar esto:

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

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 CHAR72
21/04/2008 - 19:29 | Informe spam
Gracias tocayo, la probare!

Saludos

Carlos

"Carlos M. Calvelo" escribió en el mensaje
news:
Hola,

On 18 apr, 21:45, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
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



Seguro que quieres decir: Desde 7, Hasta 9


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



Eso dependerá mucho de la cantidad de registros en la tabla.
Puedes probar esto:

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

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 CHAR72
23/04/2008 - 22:06 | Informe spam
Hola Carlos, tu codigo funciona perfectamente, seguro para ti debe ser mucho
mas sencillo de entender porque a mi se escapa de entender.

Te pediria si sos tan amable de agregar algo que intente y no me funciono,
quiero relacionarlo con otra tabla y no pude, me da error (El prefijo de
columna 'xxx' no coincide con un nombre de tabla o con un alias usado en la
consulta.)

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

INNER JOIN Productos ON Inventario.Producto_ID=Productos.Producto_ID

where not exists (select * from T where num = a.num-1)


Muchas Gracias

Carlos



"Carlos M. Calvelo" escribió en el mensaje
news:
Hola,

On 18 apr, 21:45, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
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



Seguro que quieres decir: Desde 7, Hasta 9


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



Eso dependerá mucho de la cantidad de registros en la tabla.
Puedes probar esto:

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

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 CHAR72
23/04/2008 - 22:38 | Informe spam
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)

Saludos nuevamente

Carlos
"Carlos M. Calvelo" escribió en el mensaje
news:
Hola,

On 18 apr, 21:45, "CHAR72" <char72[nos pa m]@gmail.com> wrote:
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



Seguro que quieres decir: Desde 7, Hasta 9


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



Eso dependerá mucho de la cantidad de registros en la tabla.
Puedes probar esto:

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

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
24/04/2008 - 19:20 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida