SQL Rows基于单列进行连接

时间:2011-08-08 10:28:24

标签: sql oracle string-aggregation

我有值为

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

我需要一个普通的查询(不是pl / sql),可以将结果显示为

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

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

可以有三列以上。

2 个答案:

答案 0 :(得分:8)

您可以选择following techniques中的任何一个来汇总字符串

  

有时需要聚合来自多个行的数据   到一行,给出与特定相关的数据列表   值。以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;

答案 1 :(得分: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是内置函数。