Concatenar mismo campo de registros diferentes
Hola tengo que concatenar los resultados de una query, por eje obtengo 3 resultados de esta query:
select nombre from tabla
lo que quiero es obtener en un solo registro los tres resultados separados con una coma.
select nombre from tabla
lo que quiero es obtener en un solo registro los tres resultados separados con una coma.
SELECT A.NOMBRE, B.NOMBRE, C.NOMBRE FROM TABLA A, TABLA B, TABLA C WHERE ...
.... he puesto un eje pero no tienen porq ser 3 los resultados q tengo, el numero de resultados no se sabe...
el eje bueno seria:
select nombre
from hombre
where idnombre like \'%ablo%\'
entonces obtengo:
Pablo Ruiz
Pedro Pablo Fernandez
Pablo Luis
...........
no se sabe cuantos registros obtengo y quiero hacer una query donde obtenga los campos nombre de los registros X separados por una coma....
select nombre
from hombre
where idnombre like \'%ablo%\'
entonces obtengo:
Pablo Ruiz
Pedro Pablo Fernandez
Pablo Luis
...........
no se sabe cuantos registros obtengo y quiero hacer una query donde obtenga los campos nombre de los registros X separados por una coma....
como no te hagas un procedimiento y guardes los valores en una variable dentro de un bucle no se como lo puedes hacer
Creo que con una select no es posible, como ha dicho chemian lo mejor es que te crees un procedure.
Aquà están unos ejemplos de lo que quieres hacer:
SQL> @concatenate
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) = 'A'
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW
PL/SQL procedure successfully completed.
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) IN ('A', 'D')
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW,DBSNMP,DIRSTATS
PL/SQL procedure successfully completed.
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) IN ('A', 'D', 'S')
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW,DBSNMP,DIRSTATS,STATS,SYS,SYSTEM
PL/SQL procedure successfully completed.
SQL>
Buena suerte,
Andrew
SQL> @concatenate
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) = 'A'
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW
PL/SQL procedure successfully completed.
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) IN ('A', 'D')
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW,DBSNMP,DIRSTATS
PL/SQL procedure successfully completed.
SQL> DECLARE
2 CURSOR C1 IS
3 SELECT USERNAME
4 FROM DBA_USERS
5 WHERE SUBSTR(USERNAME,1,1) IN ('A', 'D', 'S')
6 ORDER BY 1;
7 FIRST BOOLEAN := TRUE;
8 USER_LIST VARCHAR2(100) := NULL;
9 BEGIN
10 FOR USERS IN C1
11 LOOP
12 IF FIRST = TRUE THEN
13 USER_LIST := USERS.USERNAME;
14 FIRST := FALSE;
15 ELSE
16 USER_LIST := USER_LIST||','||USERS.USERNAME;
17 END IF;
18 END LOOP;
19 DBMS_OUTPUT.PUT_LINE('User List: '||USER_LIST);
20 END;
21 /
User List: ANDREW,DBSNMP,DIRSTATS,STATS,SYS,SYSTEM
PL/SQL procedure successfully completed.
SQL>
Buena suerte,
Andrew
