Consulta SQL compleja

23/06/2004 - 10:20 por Trophi | Informe spam
En SQL-Server tengo la siguiente consulta:

SELECT clientes.Nombre, clientes.Apellidos,
telefonos.Numero FROM clientes LEFT OUTER JOIN
telefonos ON clientes.Codigo = telefonos.Cliente
GROUP BY clientes.Nombre, clientes.Apellidos,
telefonos.Numero, telefonos.Numero

En la tabla clientes tan solo va a haber una ocurrencia
por cada cliente, mientras que en la tabla telefonos puede
haber una, varias o ninguna ocurrencia por lo que si por
ej. un cliente tiene 3 telefonos aparece repetido 3 veces.
Como puedo hacer para que por ej. si el cliente tiene 3
telefonos aparezca algo así:

juan, de la cruz, telefono1, telefono2, telefono3

Todo en una línea, por supuesto si tiene un solo telefno
pues las columnas telefono 2 y 3 aparecerán en blanco.

De antemano muchas gracias

Preguntas similare

Leer las respuestas

#1 Angel
23/06/2004 - 10:23 | Informe spam
yo lo haria con un sentencia CASE WHEN...

salu2!

"Trophi" escribió en el mensaje
news:2075201c458fa$e84b8c30$
En SQL-Server tengo la siguiente consulta:

SELECT clientes.Nombre, clientes.Apellidos,
telefonos.Numero FROM clientes LEFT OUTER JOIN
telefonos ON clientes.Codigo = telefonos.Cliente
GROUP BY clientes.Nombre, clientes.Apellidos,
telefonos.Numero, telefonos.Numero

En la tabla clientes tan solo va a haber una ocurrencia
por cada cliente, mientras que en la tabla telefonos puede
haber una, varias o ninguna ocurrencia por lo que si por
ej. un cliente tiene 3 telefonos aparece repetido 3 veces.
Como puedo hacer para que por ej. si el cliente tiene 3
telefonos aparezca algo así:

juan, de la cruz, telefono1, telefono2, telefono3

Todo en una línea, por supuesto si tiene un solo telefno
pues las columnas telefono 2 y 3 aparecerán en blanco.

De antemano muchas gracias
Respuesta Responder a este mensaje
#2 Trophi
23/06/2004 - 10:35 | Informe spam
Hola gracias por contestar, había pensado algo así, el
problema está en que en la tabla "telefonos" un mismo
cliente puede tener entre ninguno o infinitos teléfonos,
la sentencia CASE me valdría si supiese que tiene un nº
concreto como máximo. Otra opción que me valdría es tener
todos los teléfonos en un campo separados por comas algo
así:

nombre, domicilio, telefonos

juan perez |avd. europa | 911232212, 622121212


yo lo haria con un sentencia CASE WHEN...

salu2!

"Trophi" escribió


en el mensaje
news:2075201c458fa$e84b8c30$
En SQL-Server tengo la siguiente consulta:

SELECT clientes.Nombre, clientes.Apellidos,
telefonos.Numero FROM clientes LEFT OUTER JOIN
telefonos ON clientes.Codigo = telefonos.Cliente
GROUP BY clientes.Nombre, clientes.Apellidos,
telefonos.Numero, telefonos.Numero

En la tabla clientes tan solo va a haber una ocurrencia
por cada cliente, mientras que en la tabla telefonos puede
haber una, varias o ninguna ocurrencia por lo que si por
ej. un cliente tiene 3 telefonos aparece repetido 3 veces.
Como puedo hacer para que por ej. si el cliente tiene 3
telefonos aparezca algo así:

juan, de la cruz, telefono1, telefono2, telefono3

Todo en una línea, por supuesto si tiene un solo telefno
pues las columnas telefono 2 y 3 aparecerán en blanco.

De antemano muchas gracias


.

Respuesta Responder a este mensaje
#3 Rubén Vigón
23/06/2004 - 11:10 | Informe spam
Creo que lo mejor sería que creases una pequeña función que devuelva los teléfonos de un determinado cliente; por ejemplo:

CREATE FUNCTION udfTelefonosCliente(@IdCliente int)
RETURNS varchar(400) AS
BEGIN
DECLARE @result varchar(400)
SET @result = ''
SELECT @result = @result + Telefono + ', ' FROM Telefonos WHERE IdCliente = @IdCliente
RETURN CASE WHEN LEN(@result) != 0 THEN LEFT(@result, LEN(@result) - 2) ELSE NULL END
END

Y, para utilizar ésta función en tu consulta SQL, por ejemplo:

SELECT Nombre, dbo.udfTelefonosCliente(IdCliente) AS Telefonos FROM Clientes

Que devolvería algo así como:

Nombre Telefonos
Pedro 91-1234567, 91-3427834, 93-5498474
Juan 93-4590493
Luis NULL

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida