Łącz i grupuj wiele wierszy w Oracle [duplikat]
Możliwy duplikat:
jak pobrać dwie kolumny danych w formacie A, B w Oracle
Załóżmy, że mam taką tabelę:
NAME GROUP_NAME
name1 groupA
name2 groupB
name5 groupC
name4 groupA
name3 groupC
Chciałbym uzyskać taki wynik:
GROUP_NAME NAMES
groupA name1,name4
groupB name2
groupC name3,name5
Gdyby w tabeli była tylko jedna kolumna, mógłbym połączyć rekordy, wykonując następujące czynności, ale z grupowaniem w kontekście naprawdę nie mam zbyt dużego pojęcia.
Łączenie jednej tabeli kolumn:
SELECT names
FROM (SELECT SYS_CONNECT_BY_PATH(names,' ') names, level
FROM name_table
START WITH names = (SELECT names FROM name_table WHERE rownum = 1)
CONNECT BY PRIOR names < names
ORDER BY level DESC)
WHERE rownum = 1
Zaktualizowano:Teraz mam rozwiązanie za pomocąLISTAGG
:
SELECT
group_name,
LISTAGG(name, ', ')
WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP BY group_name
Wciąż zainteresowany bardziej „ogólnym” rozwiązaniem dla przypadków, gdyLISTAGG
jest niedostępne.