Конкатенация строк SQL на основе одного столбца - PullRequest
1 голос
/ 08 августа 2011

У меня есть таблица со значениями

X     Y     Z  
-     ---   - 
1     abc   P
1     def   Q

Мне нужен нормальный запрос (не pl / sql), который может дать результат как

X  Y        Z
-  -------  ---
1  abc,def  P,Q

, т.е. на основе столбца X значенияпреобразован в формат csv

Может быть более трех столбцов.

Ответы [ 2 ]

8 голосов
/ 08 августа 2011

Вы можете выбрать любой из следующих методов , чтобы агрегировать ваши строки

Иногда необходимо объединить данные из ряда строк в одну строку, давая список данных, связанных с конкретным значение. Используя таблицу SCOTT.EMP в качестве примера, мы можем захотеть получить список сотрудников для каждого отдела. Ниже приведен список базовые данные и тип вывода, который мы хотели бы вернуть из совокупный запрос.

Base Data:

    DEPTNO ENAME
---------- ----------
        20 SMITH
        30 ALLEN
        30 WARD
        20 JONES
        30 MARTIN
        30 BLAKE
        10 CLARK
        20 SCOTT
        10 KING
        30 TURNER
        20 ADAMS
        30 JAMES
        20 FORD
        10 MILLER

Desired Output:

    DEPTNO EMPLOYEES
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 SMITH,FORD,ADAMS,SCOTT,JONES
        30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD

Лично я нахожу этот синтаксис очень читабельным

SELECT x, wm_concat(y), wm_concat(z) 
FROM   xyz
GROUP BY x;
0 голосов
/ 08 августа 2011

Для Postgre вы можете использовать что-то вроде

select X, array_to_string(array_accum(Y), ',') as Y, array_to_string(array_accum(Z), ',') as Z
from Table
group by X

Это array_to_string и array_accum - встроенные функции.

...