Per coloro che devono risolvere questo problema utilizzando Oracle 9i (o versioni precedenti), sarà probabilmente necessario utilizzare SYS_CONNECT_BY_PATH, poiché LISTAGG non è disponibile.
Per rispondere alla OP, la seguente query visualizzerà il PID dalla Tabella A e concatenare tutte le colonne DESC da Tabella B:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT a.pid, seq, description
FROM table_a a, table_b b
WHERE a.pid = b.pid(+)
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Ci possono anche essere casi in cui chiavi e valori sono tutti contenuti in un unico tavolo. La seguente query può essere utilizzata dove non c'è tabella A, e solo Tabella B esiste:
SELECT pid, SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY pid ORDER BY pid, seq) rnum, pid, description
FROM (
SELECT pid, seq, description
FROM table_b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR pid = pid
GROUP BY pid
ORDER BY pid;
Tutti i valori possono essere riordinate come desiderato. Le singole descrizioni concatenate possono essere riordinate nella clausola PARTITION BY e l'elenco dei PID può essere riordinato nella clausola finale ORDER BY.
alternativa: ci possono essere momenti in cui si desidera concatenare tutti i valori di un'intera tabella in una riga.
L'idea chiave qui è usare un valore artificiale per il gruppo di descrizioni da concatenare.
Nella query seguente, la stringa costante '1' è usato, ma qualsiasi valore funzionerà:
SELECT SUBSTR (MAX (SYS_CONNECT_BY_PATH (description, ', ')), 3) all_descriptions
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY unique_id ORDER BY pid, seq) rnum, description
FROM (
SELECT '1' unique_id, b.pid, b.seq, b.description
FROM table_b b
)
)
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum - 1;
Persona descrizioni concatenati possono essere riordinate in PARTITION BY.
Diverse altre risposte in questa pagina hanno anche parlato di questo riferimento estremamente utile: https://oracle-base.com/articles/misc/string-aggregation-techniques
veda ad esempio: http://halisway.blogspot.com/2006/08/oracle-groupconcat-updated-again.html – Andomar
Si prega di guardare [questa soluzione] (https://stackoverflow.com/a/19348687/2459039). Ti sarà utile. –