SQL Server でカンマ区切りリストを作成するクエリ
あなたが指定したクエリは、テーブルから従業員名のカンマ区切りリストを作成するように設計されています。ただし、クエリが複雑なので混乱するかもしれません。段階的に見ていきましょう。
ステップ 1: 従業員名のサブクエリを結合する
サブクエリ:
<code class="language-sql">SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')</code>
接続されている従業員名を XML として返します。 「data()」エイリアスはエラーを強制するために使用され、その後、FOR XML PATH('') 句によって隠蔽されます。これにより、タグのない XML が生成されます。
ステップ 2: スペースを削除する
Replace() 関数は、XML 文字列内のスペースをカンマに置換するために使用されます:
<code class="language-sql">allemp = Replace ((SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')), ' ', ', ') </code>
ステップ 3: グループ化と出力
部門番号別にクエリをグループ化するには、GROUP BY DEPTNO を使用します。次に、各部門の従業員名のカンマ区切りリストとして出力を表示します。
代替クエリ
次のクエリを使用しても、いくつかの改良を加えて同じ結果を得ることができます:
<code class="language-sql">SELECT E1.deptno, STUFF(( SELECT ', ' + E2.ename FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR XML PATH('') ), 1, 2, '') FROM EMP AS e1 GROUP BY DEPTNO; </code>
このクエリは STUFF() 関数を使用して最初のカンマとスペースを削除します。また、XML タグの作成を避けるために、サブクエリ内のエイリアスも省略されます。
以上がSQL Server で従業員名のカンマ区切りリストを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。