T-SQL の別のフィールドによって複数のレコードのフィールドをグループ化する
この記事では、2 つのテーブル内の複数のレコードに関連付けられたフィールド値をグループ化する手法について説明します。 Reviews、Reviewers、および Users テーブルのデータを組み合わせることで、FName フィールドをカンマ区切りの文字列に連結できます。
<code class="language-sql">-- 示例数据 DECLARE @Reviews TABLE( ReviewID INT, ReviewDate DATETIME ) DECLARE @Reviewers TABLE( ReviewerID INT, ReviewID INT, UserID INT ) DECLARE @Users TABLE( UserID INT, FName VARCHAR(50), LName VARCHAR(50) ) INSERT INTO @Reviews SELECT 1, '12 Jan 2009' INSERT INTO @Reviews SELECT 2, '25 Jan 2009' INSERT INTO @Users SELECT 1, 'Bob', '' INSERT INTO @Users SELECT 2, 'Joe', '' INSERT INTO @Users SELECT 3, 'Frank', '' INSERT INTO @Users SELECT 4, 'Sue', '' INSERT INTO @Users SELECT 5, 'Alice', '' INSERT INTO @Reviewers SELECT 1, 1, 1 INSERT INTO @Reviewers SELECT 2, 1, 2 INSERT INTO @Reviewers SELECT 3, 1, 3 INSERT INTO @Reviewers SELECT 4, 2, 4 INSERT INTO @Reviewers SELECT 5, 2, 5</code>
ネストされた SELECT と FOR XML PATH() を使用したソリューション
FOR XML PATH() 演算子を使用すると、FName 値を単一の文字列に連結できます。
<code class="language-sql">SELECT *, ( SELECT u.FName + ',' FROM @Users u INNER JOIN @Reviewers rs ON u.UserID = rs.UserID WHERE rs.ReviewID = r.ReviewID FOR XML PATH('') ) AS UserNames FROM @Reviews r</code>
このクエリは次の結果を返します:
<code>ReviewID ReviewDate UserNames 1 12 Jan 2009 Bob,Joe,Frank 2 25 Jan 2009 Sue,Alice</code>
結論
FOR XML PATH() 関数を使用して、異なるテーブル内の複数のレコードのフィールド値を共通のフィールドでグループ化することに成功しました。この手法は、連結された文字列表現が必要なシナリオに適用できます。
以上が複数の T-SQL レコードのフィールドをカンマ区切りの文字列に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。