1. ホーム
  2. sql

Oracleでストアドプロシージャを作成せずに複数行を1行に連結する方法を教えてください。[重複しています]。

2023-11-23 23:07:54

質問内容

oracleでストアドプロシージャを作成せずに以下のことを実現するにはどうしたらよいでしょうか?

データセットです。

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12

望ましい結果

question_id    element_id
1              7,8
2              9
3              10,11,12

どのように解決するのですか?

文字列の集計を行う方法はたくさんありますが、最も簡単なのはユーザー定義関数です。 関数を使わない方法として、これを試してみてください。 注意点として、関数を使わない簡単な方法はありません。

これはカスタム関数なしの最短ルートです: (これは ROW_NUMBER() と SYS_CONNECT_BY_PATH 関数を使用します)

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