с Firebird 6.0 ваша версия: любая

LISTAGG

Версии сервера

2.53.04.05.06.0
−−−−Да

Доступно в

DSQL

Формат

LISTAGG([ALL] expression [, separator])
  [WITHIN GROUP (ORDER BY order_expression)]

Описание

Агрегатная функция LISTAGG конкатенирует значения аргумента: возвращает строку из значений выражения, отличных от NULL, в группе, разделённых запятой или заданным разделителем. Если значений, отличных от NULL, нет (включая пустую группу), возвращается NULL. Тип результата — BLOB.

Устаревший синтаксис LIST сохранён для обратной совместимости и является синонимом LISTAGG. В новых проектах рекомендуется LISTAGG — она совместима со стандартом SQL.

Ключевое слово ALL перед выражением (по умолчанию) обрабатывает все значения, отличные от NULL; DISTINCT удаляет дубликаты — кроме случая, когда выражение является BLOB.

Необязательный separator — любое строковое выражение (например, ascii_char(13)); по умолчанию — запятая. Аргументы поддерживают BLOB любого размера и набора символов; даты и числа неявно приводятся к строке. Результат — текстовый BLOB, кроме случая, когда выражение является BLOB другого подтипа.

Порядок значений задаётся опцией WITHIN GROUP (ORDER BY ...); без неё порядок конкатенации не определён. При указании DISTINCT сортировка в WITHIN GROUP игнорируется, кроме случая, когда агрегированное выражение стоит первым в списке сортировки — тогда направление сортировки учитывается внутри DISTINCT.

Предусмотренное стандартом предложение ON OVERFLOW (обработка переполнения) не реализовано: LISTAGG всегда возвращает BLOB, так что переполнения не бывает, и при указании опция молча игнорируется.

Функция появилась в Firebird 6.0 — версия в разработке, доступны снапшот-сборки.

Пример

Список в алфавитном порядке с заданным разделителем:

SELECT LISTAGG(display_name, '; ') WITHIN GROUP (ORDER BY display_name)
FROM GR_WORK;

Группировка с сортировкой по убыванию:

SELECT
  work_type,
  LISTAGG(display_name, '; ') WITHIN GROUP (ORDER BY display_name DESC) AS works
FROM GR_WORK
GROUP BY work_type;

См. также

COALESCE, Встроенные функции по группам

Источник

Руководство по языку SQL СУБД Firebird 6.0 (sim1984 / ibase.ru, Public Documentation License)

Обсуждение