[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
2022-03-18 03:41:44
質問
名前を保持するデータベースのテーブルが、3行あるとする。
Peter
Paul
Mary
の1つの文字列にする簡単な方法はありますか?
Peter, Paul, Mary
?
解決方法は?
SQL Server 2017またはAzureをお使いの場合は Mathieu Rendaの回答 .
一対多の関係を持つ2つのテーブルを結合しようとしたとき、同じような問題が発生しました。SQL 2005 では、次のようなことがわかりました。
XML PATH
メソッドは、行の連結を非常に簡単に処理することができます。
というテーブルがある場合
STUDENTS
SubjectID StudentName
---------- -------------
1 Mary
1 John
1 Sam
2 Alaina
2 Edward
期待した結果は
SubjectID StudentName
---------- -------------
1 Mary, John, Sam
2 Alaina, Edward
私は以下を使用しました。
T-SQL
:
SELECT Main.SubjectID,
LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
(
SELECT DISTINCT ST2.SubjectID,
(
SELECT ST1.StudentName + ',' AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH (''), TYPE
).value('text()[1]','nvarchar(max)') [Students]
FROM dbo.Students ST2
) [Main]
同じことをよりコンパクトに行うには、冒頭のカンマを連結して
substring
をスキップして、サブクエリを実行する必要がないようにします。
SELECT DISTINCT ST2.SubjectID,
SUBSTRING(
(
SELECT ','+ST1.StudentName AS [text()]
FROM dbo.Students ST1
WHERE ST1.SubjectID = ST2.SubjectID
ORDER BY ST1.SubjectID
FOR XML PATH (''), TYPE
).value('text()[1]','nvarchar(max)'), 2, 1000) [Students]
FROM dbo.Students ST2
関連
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] データベース内の全テーブルのサイズを取得する
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み】サブクエリから複数行を1つの区切りフィールドに「結合」するSQL Server関数を作成する方法とは?[重複している]。