Oracle SQL - отображать значения до текущей записи - PullRequest
0 голосов
/ 14 января 2019

Могу ли я использовать LISTAGG или аналогичную аналитическую функцию в Oracle SQL для отображения всех значений в группе до текущей записи?

Это мой стол:

id      group_id   value
--      --------   -----
1       1          A
2       1          B
3       1          C
4       2          X
5       2          Y
6       2          Z

Хотелось бы получить следующий результат:

id      group_id   values
--      --------   ------
1       1          A
2       1          AB
3       1          ABC
4       2          X
5       2          XY
6       2          XYZ

1 Ответ

0 голосов
/ 14 января 2019

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

SELECT
    t1.id,
    t1.group_id,
    (SELECT LISTAGG(t2.val, '') WITHIN GROUP (ORDER BY t2.id)
     FROM yourTable t2
     WHERE t1.group_id = t2.group_id AND t2.id <= t1.id) AS vals
FROM yourTable t1
ORDER BY
    t1.id;

Демо

Логика здесь заключается в том, что для каждой группы при свертывании происходит конкатенация всех значений, приходящихся на текущее значение id в данной строке или перед ним.

Другим подходом к этому, который мог бы работать и масштабироваться лучше, было бы использование рекурсивного CTE. Но для этого потребуется больше кода, и его будет сложнее переварить, чем то, что я написал выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...