[解決済み] Oracleで複数行をカンマ区切りリストに結合する方法を教えてください。重複
2022-05-15 11:42:56
質問
簡単なクエリを持っています。
select * from countries
を実行すると、次のような結果になります。
country_name
------------
Albania
Andorra
Antigua
.....
結果を1行で返したいので、こんな感じ。
Albania, Andorra, Antigua, ...
もちろん、私はこの仕事をするためにPL/SQL関数を書くことができます(私はOracle 10gですでにしました)が、このタスクのためのより良い、できれば非Oracle固有のソリューション(または組み込み関数であるかもしれません)はありますか?
私は一般的に、サブクエリで複数行を回避するためにそれを使用します。
私の質問は、同じような質問に基づいています。 SQL サーバー 2005 .
アップデイト : 私の関数はこのような感じです。
CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
OPEN rec FOR sqlstr;
LOOP
FETCH rec INTO field;
EXIT WHEN rec%NOTFOUND;
ret := ret || field || sep;
END LOOP;
if length(ret) = 0 then
RETURN '';
else
RETURN substr(ret,1,length(ret)-length(sep));
end if;
end;
どのように解決するのですか?
straggや関数を作成しない簡単な方法を紹介します。
create table countries ( country_name varchar2 (100));
insert into countries values ('Albania');
insert into countries values ('Andorra');
insert into countries values ('Antigua');
SELECT SUBSTR (SYS_CONNECT_BY_PATH (country_name , ','), 2) csv
FROM (SELECT country_name , ROW_NUMBER () OVER (ORDER BY country_name ) rn,
COUNT (*) OVER () cnt
FROM countries)
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;
CSV
--------------------------
Albania,Andorra,Antigua
1 row selected.
他の方もおっしゃっていますが、11g R2以上であれば、よりシンプルなlistaggを使用できるようになりました。
select listagg(country_name,', ') within group(order by country_name) csv
from countries;
CSV
--------------------------
Albania, Andorra, Antigua
1 row selected.
関連
-
executeQuery()ソリューションでデータ操作文を発行できない。
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] MYSQLでMAX(列の値)、PARTITIONで別の列で行を選択するにはどうすればよいですか?
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
-
[解決済み】Oracleで複数行のカラム値を連結するSQLクエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み】Oracleで複数行のカラム値を連結するSQLクエリ