No puedes agrupar porque seguirian saliendo repetidos, para ponerlos en 2 columnas necesitarias saber si el aval es el 1 o el 2, y como sabria eso???
Código SQL:
Ver originalCREATE TABLE #cliente(
id INT,
nombre VARCHAR(20)
)
CREATE TABLE #aval(
id INT,
nombre VARCHAR(20)
)
DROP TABLE #relacion
CREATE TABLE #relacion
(
id_cliente INT,
id_aval INT,
num_aval INT
)
INSERT INTO #cliente VALUES (1,'Juan')
INSERT INTO #cliente VALUES (2,'Pedro')
INSERT INTO #cliente VALUES (3,'Maria')
INSERT INTO #aval VALUES (1,'Mario')
INSERT INTO #aval VALUES (2,'Lupe')
INSERT INTO #aval VALUES (3,'Ana')
INSERT INTO #relacion VALUES (1,1,1)
INSERT INTO #relacion VALUES (1,2,2)
INSERT INTO #relacion VALUES (2,1,1)
INSERT INTO #relacion VALUES (3,3,1)
SELECT t2.nombre AS cliente,
CASE WHEN t1.num_aval=1 THEN
t3.nombre END AS aval1,
CASE WHEN
t1.num_aval=2 THEN t3.nombre END AS aval2 INTO #temp
FROM #relacion AS t1
INNER JOIN #cliente AS t2 ON (t1.id_cliente=t2.id)
INNER JOIN #aval AS t3 ON (t1.id_aval=t3.id)
SELECT t1.cliente,t2.aval1,t3.aval2 FROM #temp AS t1
LEFT JOIN #temp AS t2 ON (t1.cliente=t2.cliente AND t2.aval1 IS NOT NULL)
LEFT JOIN #temp AS t3 ON (t1.cliente=t3.cliente AND t3.aval2 IS NOT NULL)
GROUP BY t1.cliente,t2.aval1,t3.aval2
Si agregamos un campo entero a la relacion(para decir si el aval es 1 o 2) entonces podemos meter un case dentro del query para poder saber si el aval es 1 o 2, pero de todos modos salen valores repetidos, para eso metemos el resultado dentro de una tabla temporal y con esa temporal eliminamos los nulos y lo dejamos todo en un solo renglon :)
saludos!