SQL Rows基于单列进行连接

C D*_*pak 1 sql oracle string-aggregation

我有值的表

X     Y     Z  
-     ---   - 
1     abc   P
1     def   Q
Run Code Online (Sandbox Code Playgroud)

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

X  Y        Z
-  -------  ---
1  abc,def  P,Q
Run Code Online (Sandbox Code Playgroud)

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

可以有三列以上.

Lie*_*ers 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
Run Code Online (Sandbox Code Playgroud)

就个人而言,我发现这种语法非常易读

SELECT x, wm_concat(y), wm_concat(z) 
FROM   xyz
GROUP BY x;
Run Code Online (Sandbox Code Playgroud)

  • +1关于这个非常晚的问题有很多问题,你给出了最精细解释的链接. (2认同)