首頁 >資料庫 >mysql教程 >如何使用查詢從 SQL Server 資料表產生逗號分隔的清單?

如何使用查詢從 SQL Server 資料表產生逗號分隔的清單?

DDD
DDD原創
2025-01-18 10:07:41632瀏覽

How to Generate Comma-Separated Lists from SQL Server Tables Using Queries?

SQL Server:使用查詢產生逗號分隔清單

查詢解釋

此查詢旨在從表中建立逗號分隔列表,它利用 FOR XML PATH 函數建構包含所需值的 XML 片段。它使用子查詢來取得指定部門的員工姓名 (ename),然後用逗號取代 XML 片段中的空格。

<code class="language-sql">SELECT 
    E1.deptno, 
    allemp = Replace ((SELECT E2.ename AS 'data()' 
                       FROM emp AS e2 
                       WHERE e1.deptno = e2.DEPTNO 
                       FOR xml PATH('')), ' ', ', ') 
 FROM EMP AS e1 
 GROUP BY DEPTNO; </code>

FOR XML PATH 的工作原理

FOR XML PATH('') 根據指定的欄位(在本例中為 ename)為 emp 表中的每一行產生一個 XML 片段。假設有一個簡單的員工表:

<code>EmployeeID      Name
1               John Smith
2               Jane Doe</code>

以下查詢將建立 XML:

<code class="language-sql">SELECT  EmployeeID, Name
FROM    emp.Employee
FOR XML PATH ('Employee');</code>

輸出:

<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>

錯誤處理與替代方案

提供的查詢嘗試使用 data() 作為 XML 標籤,這是無效的,會導致錯誤。為了避免這種情況,可以使用以下修改後的查詢:

<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>

此查詢可確保在子查詢中不會建立任何 XML 標記,並且它還透過在子查詢中新增逗號來處理包含空格的名稱。

以上是如何使用查詢從 SQL Server 資料表產生逗號分隔的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn