2009-08-10 3 views
4

STRAGG 함수 구현은 결과를 단일 열 값으로 반환합니다. 오라클 구현은 매우 일반적인 것처럼 보이고 다른 테이블 (및 관계)에 대해 소비 될 수 있습니다. SQL Server에서도 비슷한 동작을 얻을 수 있습니다. 웹 검색은 하드 코딩 된 구현 만 반환하고 일반 구현은 반환하지 않는 것으로 보입니다. SQL Server에 대한 알려진 솔루션이 있습니까?SQL Server를 지원하는 Tom Kyte의 STRAGG 기능 구현이 있습니까?

+0

[SQLSERVER의 ListAGG] 가능한 복제본 (http://stackoverflow.com/questions/15477743/listagg-in-sqlserver) – Veverke

답변

6

널리 사용되는 XML에 대한 멋진 해결책이 있습니다. 집계중인 문자열에 XML 유효하지 않은 문자열이나 XML 특수 문자열이없는 경우 가장 간단합니다. 예를 들면 다음과 같습니다.

SELECT * 
FROM 
(
    SELECT x AS [data()] 
    FROM 
     (
     SELECT 'something' 
     UNION ALL 
     SELECT 'something else' 
     UNION ALL 
     SELECT 'something & something' 
    ) y (x) 
    FOR XML PATH('') 
) z (final) 

이 예는 http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/07/06/871.aspx

당신은이 간단한 예와보다 훨씬 더 많은 일을 할 수에 토니 Rogerson에의 게시물에서입니다. 집계 내의 항목 순서를 지정할 수 있습니다 (파생 테이블에서 ORDER BY 지정). 하나 이상의 결과 행을 가져올 수 있도록 그룹화하고 결합 할 수 있으며, 구분 기호를 변경할 수 있습니다. 다음은이 기술에 대한 다른 링크의 커플 :

http://blogs.technet.com/wardpond/archive/2008/03/15/database-programming-the-string-concatenation-xml-trick-revisited-or-adam-is-right-but-we-can-fix-it.aspx

http://sqlblog.com/blogs/adam_machanic/archive/2009/05/31/grouped-string-concatenation-the-winner-is.aspx

1

Anith 센 내가 그의 기사 http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ 합치 행에서 SQL Server에 대한이 질문에 대한 가장 포괄적 인 대답은 생각했다 Transact-SQL의 가치는 2008 년 7 월 31 일입니다.이 작업에는 여러 가지 기법이 있지만 XML 트릭이 가장 빠르다고 생각합니다. SQL Server 2005 이전에는 기사에서 주석으로 표시 한 UPDATE 트릭의 변형을 사용했습니다.

관련 문제