0

Oracle Database 11g Enterprise Edition リリース 11.2.0.2.0 - 64 ビット製品。

以下の形式の表があります。

Number  User  Value
-------------------
1       A     25
1       B     28
2       C     30
2       D     35

これは私が欲しいものです:

Number  User  Value
-------------------
1       A,B   25,28
2       C,D   30,35

私はListaggを使ってみましたが、それは私に与えますORA-01489: result of string concatenation is too long.

これはlistaggコマンドでした:

  SELECT "Number",
         LISTAGG ("user", ', ') WITHIN GROUP (ORDER BY "user") "user",
         LISTAGG ("value", ', ') WITHIN GROUP (ORDER BY "user") VALUE
    FROM table
GROUP BY "Number";

権限がないため、タイプを作成できません。他の同様の質問の 1 つで、誰かが collect の使用を提案しました。だからこれを使って:

  SELECT number, CAST (COLLECT (USER) AS SYS.DBMSOUTPUT_LINESARRAY)
    FROM emp
GROUP BY number;

ここからどこへ行けばいいのかわからない。このクエリを実行すると、次の列が表示されます。

CAST(COLLECT(USER)ASSYS 
-----------------------
COLLECTION  
COLLECTION  
COLLECTION  

ご覧のとおり、私の SQL の知識はごくわずかです。どんな助けでも大歓迎です!

4

1 に答える 1

1

xmlagg アプローチを使用してみてください。

rtrim(xmlagg(xmlelement(e, name1 || ',')).extract('//text()').getclobval(), ',')

ここにsqlfiddleのデモがあります

于 2013-07-24T15:42:09.660 に答える