Consulta limitada

14/09/2006 - 00:18 por jgds2005 | Informe spam
Tengo la siguiente consulta, supongamos que tengo una tabla como la siguiente

cliente producto
-
A1 CC0
A1 CC1
A1 CC3
A1 CC4
A2 CC0
A2 CC3
A3 CC1
A3 CC4
A3 CC5

Lo que quiero obtener es lo siguiente

cliente producto
-
A1 CC0
A1 CC1
A2 CC0
A2 CC3
A3 CC1
A3 CC4

Es decir, para cada cliente, los productos asociados pero solo los 2
primeros. Como una especie de Select Top, agrupado por cliente (pero
obviamente no existe función de agregación).
El motor es SQL 2000.

Gracias.

Preguntas similare

Leer las respuestas

#1 Manuel Etcheto
14/09/2006 - 00:38 | Informe spam
Probá:
SELECT cliente, min(producto) FROM dbo.Tabla
group by cliente
UNION ALL
SELECT T.cliente, min(T.producto) as producto FROM dbo.Tabla T
LEFT JOIN (SELECT cliente, min(producto) as producto FROM dbo.Tabla
group by cliente) TD
ON T.cliente = TD.cliente
WHERE TD.producto < T.producto
group by T.cliente
ORDER BY 1

Suerte
Manuel

"jgds2005" escribió en el mensaje
news:
Tengo la siguiente consulta, supongamos que tengo una tabla como la
siguiente

cliente producto
-
A1 CC0
A1 CC1
A1 CC3
A1 CC4
A2 CC0
A2 CC3
A3 CC1
A3 CC4
A3 CC5

Lo que quiero obtener es lo siguiente

cliente producto
-
A1 CC0
A1 CC1
A2 CC0
A2 CC3
A3 CC1
A3 CC4

Es decir, para cada cliente, los productos asociados pero solo los 2
primeros. Como una especie de Select Top, agrupado por cliente (pero
obviamente no existe función de agregación).
El motor es SQL 2000.

Gracias.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
14/09/2006 - 01:48 | Informe spam
jgds2005,

Que criterio podemos usar para decirle a SQL Server como identificar cual es
primero, segundo, etc.?


AMB


"jgds2005" wrote:

Tengo la siguiente consulta, supongamos que tengo una tabla como la siguiente

cliente producto
-
A1 CC0
A1 CC1
A1 CC3
A1 CC4
A2 CC0
A2 CC3
A3 CC1
A3 CC4
A3 CC5

Lo que quiero obtener es lo siguiente

cliente producto
-
A1 CC0
A1 CC1
A2 CC0
A2 CC3
A3 CC1
A3 CC4

Es decir, para cada cliente, los productos asociados pero solo los 2
primeros. Como una especie de Select Top, agrupado por cliente (pero
obviamente no existe función de agregación).
El motor es SQL 2000.

Gracias.
Respuesta Responder a este mensaje
#3 jgds2005
14/09/2006 - 13:52 | Informe spam
En el ejemplo coloque 2 pero quisiera saber si puedo obtener n productos de
cada cliente. El criterio puede ser ordenado por cliente, producto.

Gracias.

"Alejandro Mesa" wrote:

jgds2005,

Que criterio podemos usar para decirle a SQL Server como identificar cual es
primero, segundo, etc.?


AMB


"jgds2005" wrote:

> Tengo la siguiente consulta, supongamos que tengo una tabla como la siguiente
>
> cliente producto
> -
> A1 CC0
> A1 CC1
> A1 CC3
> A1 CC4
> A2 CC0
> A2 CC3
> A3 CC1
> A3 CC4
> A3 CC5
>
> Lo que quiero obtener es lo siguiente
>
> cliente producto
> -
> A1 CC0
> A1 CC1
> A2 CC0
> A2 CC3
> A3 CC1
> A3 CC4
>
> Es decir, para cada cliente, los productos asociados pero solo los 2
> primeros. Como una especie de Select Top, agrupado por cliente (pero
> obviamente no existe función de agregación).
> El motor es SQL 2000.
>
> Gracias.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
14/09/2006 - 14:22 | Informe spam
jgds2005,

Cuando se postea este tipo de problemas en el grupo, es de mucha ayuda que
se incluya la definicion de las tablas, incluyendo restricciones e indices,
asi como data de ejemplo y resultados esperados. Considero que la ayuda debe
ser mutua, puesto que quien este dispuesto a ayudar, debe tomar parte de su
tiempo.

create table dbo.t1 (
cliente varchar(25) not null,
producto varchar(25) not null
)
go

insert into dbo.t1 values('A1', 'CC0')
insert into dbo.t1 values('A1', 'CC1')
insert into dbo.t1 values('A1', 'CC3')
insert into dbo.t1 values('A1', 'CC4')
insert into dbo.t1 values('A2', 'CC0')
insert into dbo.t1 values('A2', 'CC3')
insert into dbo.t1 values('A3', 'CC1')
insert into dbo.t1 values('A3', 'CC4')
insert into dbo.t1 values('A3', 'CC5')
go

select
a.cliente,
a.producto
from
dbo.t1 as a
where
(
select count(*)
from dbo.t1 as b
where b.cliente = a.cliente and b.producto <= a.producto
) <= 2
order by
a.cliente, a.producto
go

drop table dbo.t1
go


AMB


"jgds2005" wrote:

En el ejemplo coloque 2 pero quisiera saber si puedo obtener n productos de
cada cliente. El criterio puede ser ordenado por cliente, producto.

Gracias.

"Alejandro Mesa" wrote:

> jgds2005,
>
> Que criterio podemos usar para decirle a SQL Server como identificar cual es
> primero, segundo, etc.?
>
>
> AMB
>
>
> "jgds2005" wrote:
>
> > Tengo la siguiente consulta, supongamos que tengo una tabla como la siguiente
> >
> > cliente producto
> > -
> > A1 CC0
> > A1 CC1
> > A1 CC3
> > A1 CC4
> > A2 CC0
> > A2 CC3
> > A3 CC1
> > A3 CC4
> > A3 CC5
> >
> > Lo que quiero obtener es lo siguiente
> >
> > cliente producto
> > -
> > A1 CC0
> > A1 CC1
> > A2 CC0
> > A2 CC3
> > A3 CC1
> > A3 CC4
> >
> > Es decir, para cada cliente, los productos asociados pero solo los 2
> > primeros. Como una especie de Select Top, agrupado por cliente (pero
> > obviamente no existe función de agregación).
> > El motor es SQL 2000.
> >
> > Gracias.
Respuesta Responder a este mensaje
#5 jgds2005
14/09/2006 - 18:08 | Informe spam
No me cabe duda de eso. Lo voy a tener en cuenta en la proxima consulta si
aplica.
Gracias.

"Alejandro Mesa" wrote:

jgds2005,

Cuando se postea este tipo de problemas en el grupo, es de mucha ayuda que
se incluya la definicion de las tablas, incluyendo restricciones e indices,
asi como data de ejemplo y resultados esperados. Considero que la ayuda debe
ser mutua, puesto que quien este dispuesto a ayudar, debe tomar parte de su
tiempo.

create table dbo.t1 (
cliente varchar(25) not null,
producto varchar(25) not null
)
go

insert into dbo.t1 values('A1', 'CC0')
insert into dbo.t1 values('A1', 'CC1')
insert into dbo.t1 values('A1', 'CC3')
insert into dbo.t1 values('A1', 'CC4')
insert into dbo.t1 values('A2', 'CC0')
insert into dbo.t1 values('A2', 'CC3')
insert into dbo.t1 values('A3', 'CC1')
insert into dbo.t1 values('A3', 'CC4')
insert into dbo.t1 values('A3', 'CC5')
go

select
a.cliente,
a.producto
from
dbo.t1 as a
where
(
select count(*)
from dbo.t1 as b
where b.cliente = a.cliente and b.producto <= a.producto
) <= 2
order by
a.cliente, a.producto
go

drop table dbo.t1
go


AMB


"jgds2005" wrote:

> En el ejemplo coloque 2 pero quisiera saber si puedo obtener n productos de
> cada cliente. El criterio puede ser ordenado por cliente, producto.
>
> Gracias.
>
> "Alejandro Mesa" wrote:
>
> > jgds2005,
> >
> > Que criterio podemos usar para decirle a SQL Server como identificar cual es
> > primero, segundo, etc.?
> >
> >
> > AMB
> >
> >
> > "jgds2005" wrote:
> >
> > > Tengo la siguiente consulta, supongamos que tengo una tabla como la siguiente
> > >
> > > cliente producto
> > > -
> > > A1 CC0
> > > A1 CC1
> > > A1 CC3
> > > A1 CC4
> > > A2 CC0
> > > A2 CC3
> > > A3 CC1
> > > A3 CC4
> > > A3 CC5
> > >
> > > Lo que quiero obtener es lo siguiente
> > >
> > > cliente producto
> > > -
> > > A1 CC0
> > > A1 CC1
> > > A2 CC0
> > > A2 CC3
> > > A3 CC1
> > > A3 CC4
> > >
> > > Es decir, para cada cliente, los productos asociados pero solo los 2
> > > primeros. Como una especie de Select Top, agrupado por cliente (pero
> > > obviamente no existe función de agregación).
> > > El motor es SQL 2000.
> > >
> > > Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida