1

我有带值的表

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

我需要一个普通查询(不是 pl/sql),它可以给出结果

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

即基于 X 列的值被转换为 csv 格式

可以有超过三列。

4

2 回答 2

8

您可以选择以下任何一种技术来聚合您的字符串

有时需要将多行中的数据聚合到一行中,给出与特定值关联的数据列表。以 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;
于 2011-08-08T10:41:05.613 回答
0

对于 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 是内置函数。

于 2011-08-08T10:39:46.440 回答