Como hago esta consulta

26/01/2006 - 19:50 por LuisMiguel | Informe spam
Buenas
Tengo una tabla de Clientes, con Id, Nombre y un tabla de Productos del
Cliente, con IdCliente, y IdProducto
Necesito obtener una relacion de Clientes que tengan uno o varios productos,
pensaba que era facil, pero no veo como hacerlo, alguna idea
Me explico un poco mejor, el cliente 1, tiene los productos, 1y 2, el
cliente 2, tiene el 1 y el 3, y el 3 tiene el 1 y el 2
Presentare los 3 productos (con un check cada uno, por ejemplo) y si el
usuario marca el 1, deberia salir todos los clientes, si marca el 1 y el 2,
deberia salir el 1 y el 3.
Uso SQLserver
Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#1 Daniel G. Samborski
26/01/2006 - 20:29 | Informe spam
Creo que podrias hacer la seleccion de esta forma.

select Clientes.Nombre from cliente
inner join Productos on Productos where Productos.IdCliente = Clientes.Id
and Productos.IdProducto=@IdProducto

le tendrias que pasar el valor seleccionado en el check a @IdProducto.

Ademas, si la seleccion es solo de un valor y no de multiples valores.
Osea, que solo podes elegir, 1 o 2 o 3, te conviene utilizar un radiobutton.


Daniel

"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:

Buenas
Tengo una tabla de Clientes, con Id, Nombre y un tabla de Productos del
Cliente, con IdCliente, y IdProducto
Necesito obtener una relacion de Clientes que tengan uno o varios
productos, pensaba que era facil, pero no veo como hacerlo, alguna idea
Me explico un poco mejor, el cliente 1, tiene los productos, 1y 2, el
cliente 2, tiene el 1 y el 3, y el 3 tiene el 1 y el 2
Presentare los 3 productos (con un check cada uno, por ejemplo) y si el
usuario marca el 1, deberia salir todos los clientes, si marca el 1 y el
2, deberia salir el 1 y el 3.
Uso SQLserver
Gracias
LuisMiguel


Respuesta Responder a este mensaje
#2 LuisMiguel
26/01/2006 - 20:48 | Informe spam
Gracias por tu respuesta
Pero la papeleta es que es multiple seleccion

Gracias
LuisMiguel
"Daniel G. Samborski" escribió en
el mensaje news:

Creo que podrias hacer la seleccion de esta forma.

select Clientes.Nombre from cliente
inner join Productos on Productos where Productos.IdCliente = Clientes.Id
and Productos.IdProducto=@IdProducto

le tendrias que pasar el valor seleccionado en el check a @IdProducto.

Ademas, si la seleccion es solo de un valor y no de multiples valores.
Osea, que solo podes elegir, 1 o 2 o 3, te conviene utilizar un
radiobutton.


Daniel

"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:

Buenas
Tengo una tabla de Clientes, con Id, Nombre y un tabla de Productos del
Cliente, con IdCliente, y IdProducto
Necesito obtener una relacion de Clientes que tengan uno o varios
productos, pensaba que era facil, pero no veo como hacerlo, alguna idea
Me explico un poco mejor, el cliente 1, tiene los productos, 1y 2, el
cliente 2, tiene el 1 y el 3, y el 3 tiene el 1 y el 2
Presentare los 3 productos (con un check cada uno, por ejemplo) y si el
usuario marca el 1, deberia salir todos los clientes, si marca el 1 y el
2, deberia salir el 1 y el 3.
Uso SQLserver
Gracias
LuisMiguel







Respuesta Responder a este mensaje
#3 Jesús López
26/01/2006 - 21:56 | Informe spam
Lamento tener que preguntar siempre lo mismo, ¿Qué versión de SQL Server
usas, 2000 ó 2005?. Lo pregunto porque en SQL Server 2000 tienes dos
soluciones distintas y en SQL Server 2005 tres. Y la que más me gusta es la
tercera de SQL Server 2005.

Saludos:

Jesús López
Respuesta Responder a este mensaje
#4 Jesús López
26/01/2006 - 23:55 | Informe spam
En SQL Server 2005 yo crearía un procedimiento almacenado
ClientesConProductos al que se le pasaría un XML con los Ids de los
productos. La forma del XML sería la siguiente;

<Ids>
<Id>1</Id>
<Id>2</Id>
</Ids>

O sea como elemento raíz Ids, y por cada Id de producto un elemento Id.

El procedimiento almacenado sería el siguiente:

CREATE PROCEDURE ClientesConProductos
@IdsProductos XML
AS
WITH IdsProductos( Id )
AS
(
SELECT Id.value('.', 'int') As Id
FROM @IdsProductos.nodes('/Ids/Id') As Ids(Id)
)
SELECT IdCliente, Nombre
FROM Clientes C
WHERE NOT EXISTS(
SELECT Id from IdsProductos
WHERE Id NOT IN (
SELECT IdProducto
FROM ProductosClientes
WHERE IdCliente = C.IdCliente
)
)
GO

Desde el Management Studio podríamos ejecutarlo como :

EXEC ClientesConProductos '<Ids><Id>1</Id><Id>3</Id></Ids>'

Desde VB se ejecutaría como cualquier otro procedimiento almacenado que
devuelve registros, podría ser, por qué no el SelectCommand de un
DataAdapter.

Saludos:

Jesús López
MVP
Respuesta Responder a este mensaje
#5 LuisMiguel
27/01/2006 - 11:36 | Informe spam
Lo siento, es SQL 2000

Feliz Entrada de Año
LuisMiguel
"Jesús López" escribió en el mensaje
news:

En SQL Server 2005 yo crearía un procedimiento almacenado
ClientesConProductos al que se le pasaría un XML con los Ids de los
productos. La forma del XML sería la siguiente;

<Ids>
<Id>1</Id>
<Id>2</Id>
</Ids>

O sea como elemento raíz Ids, y por cada Id de producto un elemento Id.

El procedimiento almacenado sería el siguiente:

CREATE PROCEDURE ClientesConProductos
@IdsProductos XML
AS
WITH IdsProductos( Id )
AS
(
SELECT Id.value('.', 'int') As Id
FROM @IdsProductos.nodes('/Ids/Id') As Ids(Id)
)
SELECT IdCliente, Nombre
FROM Clientes C
WHERE NOT EXISTS(
SELECT Id from IdsProductos
WHERE Id NOT IN (
SELECT IdProducto
FROM ProductosClientes
WHERE IdCliente = C.IdCliente
)
)
GO

Desde el Management Studio podríamos ejecutarlo como :

EXEC ClientesConProductos '<Ids><Id>1</Id><Id>3</Id></Ids>'

Desde VB se ejecutaría como cualquier otro procedimiento almacenado que
devuelve registros, podría ser, por qué no el SelectCommand de un
DataAdapter.

Saludos:

Jesús López
MVP


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