Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich durch Kommas getrennte Listen aus SQL Server-Tabellen mithilfe von Abfragen?

Wie erstelle ich durch Kommas getrennte Listen aus SQL Server-Tabellen mithilfe von Abfragen?

DDD
DDDOriginal
2025-01-18 10:07:41629Durchsuche

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

SQL Server: Verwenden Sie eine Abfrage, um eine durch Kommas getrennte Liste zu generieren

Erklärung der Abfrage

Diese Abfrage dient zum Erstellen einer durch Kommas getrennten Liste aus einer Tabelle. Sie verwendet die Funktion FOR XML PATH, um ein XML-Fragment zu erstellen, das die erforderlichen Werte enthält. Es verwendet eine Unterabfrage, um den Mitarbeiternamen (ename) für eine bestimmte Abteilung abzurufen, und ersetzt dann die Leerzeichen im XML-Fragment durch Kommas.

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

So funktioniert FOR XML PATH

FOR XML PATH('') generiert ein XML-Fragment für jede Zeile in der emp-Tabelle basierend auf der angegebenen Spalte (in diesem Fall ename). Angenommen, es gibt eine einfache Mitarbeitertabelle:

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

Die folgende Abfrage erstellt XML:

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

Ausgabe:

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

Fehlerbehandlung und Alternativen

Die bereitgestellte Abfrage versucht, data() als XML-Tag zu verwenden, was ungültig ist und zu einem Fehler führt. Um dies zu vermeiden, können Sie die folgende modifizierte Abfrage verwenden:

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

Diese Abfrage stellt sicher, dass in der Unterabfrage keine XML-Tags erstellt werden, und verarbeitet auch Namen, die Leerzeichen enthalten, indem sie in der Unterabfrage Kommas hinzufügt.

Das obige ist der detaillierte Inhalt vonWie erstelle ich durch Kommas getrennte Listen aus SQL Server-Tabellen mithilfe von Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn