1
        ID TELNO
---------- --------------------
         1 0123456789
         1 0207983498
         2 0124339848
         2 09348374834
         2 02387694364

上記のテーブルをクエリして、次のような出力を取得するにはどうすればよいですか:

        ID TEL_LIST
---------- --------------------
         1 0123456789,0207983498
         2 0124339848,09348374834,09348374834 

listagg() を使用して、列をグループ化することで ID を連結できることを知っています。例えば、

グループ内の listagg(id',') (id 順) as idList

1,2 を返します。

ただし、TELNO 列はグループ化できず、通常、値は一意です。グループ化が不可能な2番目の列で連結を行うにはどうすればよいですか?

4

3 に答える 3

4

クエリ:

SQLFIDDLEEXAMPLE

SELECT 
ID, LISTAGG(TELNO, ', ') 
WITHIN GROUP (ORDER BY TELNO) 
AS TEL_LIST
FROM   tbl
GROUP BY ID;

結果:

| ID |                             TEL_LIST |
---------------------------------------------
|  1 |               0123456789, 0207983498 |
|  2 | 0124339848, 02387694364, 09348374834 |
于 2012-11-27T12:39:31.390 に答える
3

一意の制約を設定したかどうかはわかりID,TELNOません。そうでない場合は、最初にテーブルから一意の値をフィルタリングしてから、LISTAGG以下に示すように適用する必要があります。

  SELECT ID,
       LISTAGG(TELNO, ',') WITHIN GROUP (ORDER BY ID) AS TELNO
  FROM (
       SELECT UNIQUE
              ID,
              TELNO
         FROM tbl
       )
  GROUP BY ID;

SQLFIDDLE:リンク

に目を向けるとexecution place or the trace file、同じデータセットのコストは同じになりJUSTIN、上記のソリューションで提案されているクエリを使用できます

于 2012-11-27T12:55:15.403 に答える
2

wm_concat() 関数を使用して同じことを実行できます。

 select id,wm_concat(telno) from my_table group by id;
于 2012-11-27T12:41:41.623 に答える