Select rebelde.

04/02/2004 - 16:29 por Jose Antonio | Informe spam
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.

Preguntas similare

Leer las respuestas

#6 Jose Antonio
04/02/2004 - 18:44 | Informe spam
De esta otra forma no me devuelve ninguna fila.

Ok.
"Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió en
el mensaje news:%235AXp$

Suponiendo que no se repita el mismo producto en un pedido


select distinct
clientes.nombre
from
clientes
inner join pedidos ON clientes.IDCliente = pedidos.IDCliente
inner join
(
Select
lineas.IDPedido,
count(*) cantidad -- esto no seria necesario pero para claridad lo
puse
from
lineas
where
lineas.IDProducto in (p1,p2) -- aca van los productos
group by
lineas.IDPedido
having count (*) = 2 -- Aca va la cantida de productos
) LineasDerivada
ON pedidos.IDPedido = LineasDerivada.IDPedido




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Jose Antonio" wrote in message
news:
> Con esa solucion, me salen los tres clientes, por que todos tienen o el
'P1'
> o el 'P3', yo necesito que solo me salgan
> los que tienen el 'P1' y ademas el 'P3', ambos a la vez.
>
> Alguna sugerencia?.
>
> "Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió


en
> el mensaje news:
> > Podria ser algo asi
> >
> > select distinct
> > clientes.nombre
> > from
> > clientes
> > inner join pedidos ON ( "aca va el join entre clientes y


pedidos" )
> > inner join lineas ON ("aca va el join entre lineas y pedidos")
> > where
> > lineas.producto in( producto1, ...ProductoN)
> >
> >
> > Tambien puedes usar EXISTS
> >
> >
> > select clientes.nombre
> > from
> > clientes
> > where exists
> > (
> > select pedidos.cliente
> > from pedidos
> > inner join lineas ON ("aca va el join entre lineas y pedidos")
> > where
> > lineas.producto in( producto1, ...ProductoN)
> > AND ( "aca va el join entre clientes y pedidos" )
> > )
> >
> >
> >
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> > "Jose Antonio" wrote in message
> > news:
> > > Hola, tengo tres tablas, en la primera estan los clientes, en la
segunda
> > los
> > > pedidos de estos clientes y en la tercera las lineas de estos


pedidos.
> > >
> > > Necesito saber con un select, los clientes cuyos pedidos incluyan
lineas
> > con
> > > unos productos determinados.
> > >
> > > Ejemplo:
> > >
> > > Clientes Pedidos Lineas de Pedidos
> > > 1 1 P1
> > >


P2
> > >


P3
> > >


P4
> > >
> > > 2 2 P1
> > >


P3
> > >
> > > 3 3 P1
> > >


P2
> > >
> > > En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y
P3.
> > >
> > > El resultado seria El cliente 1 y el Cliente 2.
> > >
> > >
> > > Saludos y Gracias.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Eladio Rincón
04/02/2004 - 18:59 | Informe spam
Hola,

sería útil adjuntar el script de creación de tablas y datos de prueba;

puede ser que esto te sirva:

create table TusPedidos (
idCliente int not null , idPedido int primary key)
go

create table TusLineas (
idPedido int references TusPedidos ( idPedido ),
idProducto char(2) not null )
go

insert into tusPedidos select 1, 1
insert into tusPedidos select 2, 2
insert into tusPedidos select 3, 3

insert into TusLineas select 1, 'p1'
insert into TusLineas select 1, 'p2'
insert into TusLineas select 1, 'p3'
insert into TusLineas select 1, 'p4'


insert into TusLineas select 2, 'p1'
insert into TusLineas select 2, 'p3'


insert into TusLineas select 1, 'p1'
insert into TusLineas select 1, 'p2'


go

select distinct p.idCliente
from TusPedidos p
where exists ( select count(*) from TusLineas l
where l.idProducto in ( 'p1', 'p3' )
and p.idPedido = l.IdPedido having count(*) >= 2)



Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Jose Antonio" escribió en el mensaje news:
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.


Respuesta Responder a este mensaje
#8 Jose Antonio
04/02/2004 - 19:02 | Informe spam
Con esa solucion, me salen los tres clientes, por que todos tienen o el 'P1'
o el 'P3', yo necesito que solo me salgan
los que tienen el 'P1' y ademas el 'P3', ambos a la vez.

"Manuel" escribió en el mensaje
news:
/*Codigo sin probar*/

SELECT NombreCliente
FROM cliente
WHERE idcliente
IN (SELECT DISTINCT idcliente FROM pedidos WHERE idpedido
IN (SELECT DISTINCT idpedido FROM lineapedido WHERE producto in
('p1', 'p3')))

Espero que te sirva.

Saludos.



"Jose Antonio" escribió en el mensaje
news:
> Hola, tengo tres tablas, en la primera estan los clientes, en la segunda
los
> pedidos de estos clientes y en la tercera las lineas de estos pedidos.
>
> Necesito saber con un select, los clientes cuyos pedidos incluyan lineas
con
> unos productos determinados.
>
> Ejemplo:
>
> Clientes Pedidos Lineas de Pedidos
> 1 1 P1
> P2
> P3
> P4
>
> 2 2 P1
> P3
>
> 3 3 P1
> P2
>
> En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.
>
> El resultado seria El cliente 1 y el Cliente 2.
>
>
> Saludos y Gracias.
>
>


Respuesta Responder a este mensaje
#9 Jose Antonio
04/02/2004 - 19:02 | Informe spam
Con esa solucion, me salen los tres clientes, por que todos tienen o el 'P1'
o el 'P3', yo necesito que solo me salgan
los que tienen el 'P1' y ademas el 'P3', ambos a la vez.

"José Raúl Fenollar Martínez" escribió en el mensaje
news:%
select clientes.codigo,clientes.nombre
from clientes inner join pedidos
on clientes.codigoCliente=pedidos.CodigoCliente inner
join LineasdePedidos

on pedidos.CodigodePedido= LineasdePedidos.CodigoDePedido
where LineasDePedido.Producto in('P1','P3')


"Jose Antonio" escribió en el mensaje
news:
> Hola, tengo tres tablas, en la primera estan los clientes, en la segunda
los
> pedidos de estos clientes y en la tercera las lineas de estos pedidos.
>
> Necesito saber con un select, los clientes cuyos pedidos incluyan lineas
con
> unos productos determinados.
>
> Ejemplo:
>
> Clientes Pedidos Lineas de Pedidos
> 1 1 P1
> P2
> P3
> P4
>
> 2 2 P1
> P3
>
> 3 3 P1
> P2
>
> En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.
>
> El resultado seria El cliente 1 y el Cliente 2.
>
>
> Saludos y Gracias.
>
>


Respuesta Responder a este mensaje
#10 Jose Antonio
04/02/2004 - 19:38 | Informe spam
Funciona perfectamente Mariano, habia metido la pezuña en el select.

Saludos y gracias.
"Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió en
el mensaje news:%235AXp$

Suponiendo que no se repita el mismo producto en un pedido


select distinct
clientes.nombre
from
clientes
inner join pedidos ON clientes.IDCliente = pedidos.IDCliente
inner join
(
Select
lineas.IDPedido,
count(*) cantidad -- esto no seria necesario pero para claridad lo
puse
from
lineas
where
lineas.IDProducto in (p1,p2) -- aca van los productos
group by
lineas.IDPedido
having count (*) = 2 -- Aca va la cantida de productos
) LineasDerivada
ON pedidos.IDPedido = LineasDerivada.IDPedido




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Jose Antonio" wrote in message
news:
> Con esa solucion, me salen los tres clientes, por que todos tienen o el
'P1'
> o el 'P3', yo necesito que solo me salgan
> los que tienen el 'P1' y ademas el 'P3', ambos a la vez.
>
> Alguna sugerencia?.
>
> "Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió


en
> el mensaje news:
> > Podria ser algo asi
> >
> > select distinct
> > clientes.nombre
> > from
> > clientes
> > inner join pedidos ON ( "aca va el join entre clientes y


pedidos" )
> > inner join lineas ON ("aca va el join entre lineas y pedidos")
> > where
> > lineas.producto in( producto1, ...ProductoN)
> >
> >
> > Tambien puedes usar EXISTS
> >
> >
> > select clientes.nombre
> > from
> > clientes
> > where exists
> > (
> > select pedidos.cliente
> > from pedidos
> > inner join lineas ON ("aca va el join entre lineas y pedidos")
> > where
> > lineas.producto in( producto1, ...ProductoN)
> > AND ( "aca va el join entre clientes y pedidos" )
> > )
> >
> >
> >
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> > "Jose Antonio" wrote in message
> > news:
> > > Hola, tengo tres tablas, en la primera estan los clientes, en la
segunda
> > los
> > > pedidos de estos clientes y en la tercera las lineas de estos


pedidos.
> > >
> > > Necesito saber con un select, los clientes cuyos pedidos incluyan
lineas
> > con
> > > unos productos determinados.
> > >
> > > Ejemplo:
> > >
> > > Clientes Pedidos Lineas de Pedidos
> > > 1 1 P1
> > >


P2
> > >


P3
> > >


P4
> > >
> > > 2 2 P1
> > >


P3
> > >
> > > 3 3 P1
> > >


P2
> > >
> > > En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y
P3.
> > >
> > > El resultado seria El cliente 1 y el Cliente 2.
> > >
> > >
> > > Saludos y Gracias.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida