집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server 및 Oracle에서 여러 행을 쉼표로 구분된 목록으로 연결하는 방법은 무엇입니까?
여러 SQL 행을 쉼표로 구분된 단일 열로 집계
이 문서에서는 공통 식별자를 공유하는 여러 행을 특정 열에 쉼표로 구분된 목록이 있는 단일 행으로 통합하는 방법을 보여줍니다. 이 예에서는 티켓 ID와 관련 개인이 포함된 테이블을 사용하여 각 티켓 ID가 모든 관련 개인 목록에 연결되는 결과를 생성합니다.
SQL Server 접근 방식(2005 이상)
다음 SQL Server 쿼리는 STUFF()
, ISNULL()
및 FOR XML PATH
을 사용하여 이를 수행합니다.
<code class="language-sql">SELECT t.TicketID, STUFF(ISNULL((SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [No Preceeding Comma], ISNULL((SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [Preceeding Comma If Not Empty] FROM @Tickets t GROUP BY t.TicketID</code>
이 쿼리는 하위 쿼리를 사용하여 각 TicketID
과 관련된 개인을 수집합니다. FOR XML PATH
메서드는 결과를 연결된 문자열로 변환하고 STUFF()
는 선행 쉼표를 제거합니다. ISNULL()
함수는 티켓과 연결된 개인이 없는 경우를 처리합니다. 선택적 열은 선행 쉼표를 처리하는 데 유연성을 제공합니다.
오라클 솔루션
Oracle은 LISTAGG()
기능을 사용하여 더욱 간결한 솔루션을 제공합니다.
<code class="language-sql">SELECT TicketID, LISTAGG(Person, ',') WITHIN GROUP (ORDER BY Person) OVER (PARTITION BY TicketID) AS People FROM @Tickets</code>
LISTAGG()
은 Person
열을 기준으로 정렬된 쉼표로 구분된 목록으로 값을 직접 집계합니다. PARTITION BY
절은 각각의 개별 TicketID
에 대해 집계가 발생하도록 보장합니다. 이 방법은 SQL Server에 비해 훨씬 간단하고 효율적입니다.
위 내용은 SQL Server 및 Oracle에서 여러 행을 쉼표로 구분된 목록으로 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!