-1

基本データ:

 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

必要な出力:

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

2 に答える 2

3

Oracleのバージョンを指定しませんでしたが、Oracle11gでは次を使用できますLISTAGG

select DEPTNO,
  listagg(ENAME, ',') within group (order by ENAME) as ename
from yourtable
group by DEPTNO

SQL FiddlewithDemoを参照してください

Oracle 10gでは、次を使用できます。wm_concat()

select DEPTNO,
  wm_concat(ENAME) as ename
from yourtable
group by DEPTNO

また、次を使用できる必要があります。

SELECT LRRID,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(CDSID,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS elements
FROM   
(
  SELECT LRRID,
    CDSID,
    ROW_NUMBER() OVER (PARTITION BY LRRID ORDER BY CDSID) AS curr,
    ROW_NUMBER() OVER (PARTITION BY LRRID ORDER BY CDSID) -1 AS prev
  FROM WLRR_LRR_NOTIFY_TABLE
)
GROUP BY LRRID
CONNECT BY prev = PRIOR curr AND LRRID = PRIOR LRRID
START WITH curr = 1;

SQL FiddlewithDemoを参照してください

于 2013-03-25T10:11:25.873 に答える
0

うーん、これを試してみてください。

SELECT DEPTNO, LISTAGG(ENAME, ' ') WITHIN GROUP (ORDER BY ENAME) AS ENAME
FROM   <TABLE-NAME>
GROUP BY DEPTNO;
于 2013-03-25T10:15:25.297 に答える