Объединить столбцы и строки, используя group и listagg в Oracle SQL - PullRequest
2 голосов
/ 08 января 2020

У меня есть таблица, как показано ниже, и я хотел бы сгруппировать по столбцам, а затем по строкам. У меня есть решение, которое несколько работает, но очень медленно. Есть ли более эффективный способ сделать это?

Спасибо

| GROUP | VAL 1 | VAL 2 | VAL 3 | 
|   A   |   1   |    2  |   3   |
|   A   |   4   |   5   |  6    | 
|   B   |   7   |   8   |   9   |
|   C   |   10  |   11  |   12  |

Предпочтительный результат:

| GROUP | TEXT |
|   A   |123456|
|   B   | 789  |
|   C   |101112|

Это то, что у меня сейчас есть, но оно очень медленное. Есть ли альтернативное решение, которое группирует по столбцам и строкам

    select GROUP,
    listagg(comments,',')
    within GROUP (order by GROUP) "TEXT"
    from
    (select concat(val 1,concat(val 2,val 3)) as Comments, data.* 
    from data)
    group by GROUP;

Спасибо

1 Ответ

2 голосов
/ 08 января 2020

Используйте следующий запрос, в котором вы будете напрямую получать объединенные значения столбцов:

SELECT
    "GROUP",
    LISTAGG(VAL_1 || VAL_2 || VAL_3)  
        WITHIN GROUP(ORDER BY VAL_1) AS "TEXT"
FROM DATA
GROUP BY "GROUP";

Примечание : не используйте oracle зарезервированные ключевые слова в качестве имен столбцов. Здесь GROUP является зарезервированным ключевым словом oracle.

Cheers !!

...