SQL - Ayuda con Consulta....

   
Vista:

Ayuda con Consulta....

Publicado por Antonio (4 intervenciones) el 11/08/2014 18:42:56
Hola a todos y gracias por ayudarme.

Tengo tres tablas:
-Cliente(ID, Nombre)
-RelCliCtr(IDPers, IDCtr)
-Cuenta(IDCtr, ...)

Lo que necesito es una consulta que me saque la siguiente tabla:

idPersona - Nombre - Cuenta1 - Cuenta2 - Cuenta3.
1----------------Pepe---------C1---------C2-----------C3
2----------------Ana-----------C4
3----------------Laura---------C5--------C6


Una persona puede tener mas de una cuenta, si solo tiene una, la cuenta 2 y la 3 quedan vacías....

¿Alguien me puede ayudar? Se lo agradecería mucho...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Ayuda con Consulta....

Publicado por Isaias (691 intervenciones) el 11/08/2014 20:25:12
¿Qué avance llevas? y en que motor de base de datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Consulta....

Publicado por Antonio (4 intervenciones) el 11/08/2014 20:47:41
Muchas gracias por contestar.

Estoy con Oracle.

He conseguido hacer esta consulta...

select CLIENTE.ID "ID Cliente", CLIENTE.Nombre "Nombre", (select Relclictr.IDctr from Relclictr where rownum=1 and Relclictr.IDPers = Cliente.ID)"Cuenta1" from Cliente order by Cliente.ID

Con esta consulta saco el id, nombre y una cuenta Corriente.

Utilizo el rownum=1 porque la subconsulta devuelve mas de una fila, con el rownum=1 cojo la primera, pero no se como coger las demás ya que el rownum=2 no me funciona....

Al crear la segunda columna con el rownum=2, no me saca nada, aunque hay clientes que si tienen dos cuentas.

Lo que me gustaría saber es como puedo obtener el numero de cuenta1, numero de cuenta2, .... por separado. Al primero accedo con esa subconsulta, pero al segundo, ¿Como lo saco?

Lo tengo que hacer de dos formas, procedimiento, función o programa PL/SQL, pero si no me sale la consulta....

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Consulta....

Publicado por Rafael rafael@reef-life.com.mx (83 intervenciones) el 13/08/2014 10:48:23
Hola Antonio:

Desconozco para que quieras tener una columna por cuenta, pero te doy algunas opciones:

En principio si te sirve tener todas las cuentas, en una sola columna y separadas por comas, prueba con
1
2
3
4
5
6
7
SELECT A.ID "ID Cliente"
	 , A.Nombre "Nombre"
	 , LISTAGG(B.IDctr, ', ') WITHIN GROUP (ORDER BY A.ID, A.Nombre) Cuentas
FROM Cliente A
     LEFT JOIN Relclictr B ON B.IDPers = A.ID
GROUP BY A.ID, A.Nombre
ORDER BY A.ID;
Nos cuentas como te ha ido?

Para el caso de dividirlo por cada columna y solo que una cuenta pudiera contener distintos cliente puede servirte el PIVOT ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Consulta....

Publicado por Antonio (4 intervenciones) el 13/08/2014 11:54:22
Hola Rafael.

Muchas gracias por contestar.

La consulta me la piden para un trabajo de la Universidad, y me he atascado.

Lo que me piden es eso, el Ide de la persona, el nombre y Cuenta Bancaria 1, Cuenta Bancaria 2 y Cuenta Bancaria 3, si algún cliente ni tiene, dejarlo en blanco.

La consulta que me has dicho, no entiendo casi nada, y el PIVOT del que me hablas nunca lo he usado. De todas formas, he probado la consulta y no me funciona... me dice que FROM no se encuentra donde se esperaba.

Espero que me puedas echar una mano.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Consulta....

Publicado por Rafael (83 intervenciones) el 13/08/2014 12:05:02
Prueba asi
1
2
3
4
5
6
7
8
9
10
11
12
SELECT A.ID AS "ID Cliente"
	,A.Nombre AS "Nombre"
	,LISTAGG(B.IDctr, ', ') WITHIN
GROUP (
		ORDER BY A.ID
			,A.Nombre
		) AS "Cuentas"
FROM Cliente A
LEFT JOIN Relclictr B ON B.IDPers = A.ID
GROUP BY A.ID
	,A.Nombre
ORDER BY A.ID;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con Consulta....

Publicado por Antonio (4 intervenciones) el 13/08/2014 12:19:26
Nada.... Me sigue diciendo lo mismo del from... que no se encontraba en la posición correcta.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar