2009-10-03 3 views
0

나는 다음과 같은 출력을가입 문자 SET 기반의 접근 방식을 사용하여 (SQL 서버 2005)

Data 

abc 

주를 가져올 수있는 SQL 쿼리를 작성해야 데이터가

Data 

a 
b 
c 

처럼 테이블이 : ~ 문자 수는 3 자로 제한되지 않습니다.

while 루프를 사용하여 해결했습니다. 하지만 집합 기반 접근 방식을 사용하여해야만합니다. 어떻게 할 수 있습니까?

이 문자들을 결합합니까? 나는

나를 도와주세요 COALESCE하지만 행운을 사용하여 시도

편집 :

내가 어떤 함수 또는 CLR을 사용할 수 없습니다. 그것은 전적으로 1 SQL에 있어야합니다.

FOR XML PATH는 좋은 선택이지만 링크를 보여주고 있습니다. 사실 나는 그것을 사용한 적이 없으므로 이런 식으로 주석을 달았습니다.

FOR XML PATH를 사용하는 동안 링크 텍스트를 극복하는 방법. 어떻게 작동합니까?

FOR XML PATH 이외의 다른 방법은 없습니까?

감사합니다.

+0

당신은 SQL의 한 비트에 그것을 할 수 없다 ...는 XML PATH 비트 올바른 얻을 필요가있다. udf 또는 CLR 또는 FOR XML PATH가 필요합니다. – gbn

답변

2

그냥

CREATE TABLE #foo (bar char(1)) 

INSERT #foo SELECT 'a' UNION ALL SELECT 'b' UNION ALL SELECT 'c' 
GO 

SELECT 
    buzz 
FROM 
    (
    SELECT 
     CAST(bar AS varchar(8000)) 
    FROM 
     #foo 
    FOR XML PATH ('') 
    ) fizz(buzz) 

DROP TABLE #foo 
2

정말 찾고있는 것은 문자열 연결 집계입니다. 이 아이디어만큼 대중적으로, 나는 왜 마이크로 소프트가 아직이 언어로 구현하지 않았는지 확신 할 수 없다. 그러나 SQL Server 2005 이상에서 CLR 통합을 사용하여 사용자 지정 집계를 만들 수 있습니다. 이 많이 사용하게 될 겁니다 또는 (예 등을 구분 기호를 지정할 수있는 것으로) 더 세밀하게 제어해야 할 경우 그런 다음

select 
    concat(your_column) 

from your_table 

... 같은 일을 할 수있을 것 CLR 접근법은 그만한 가치가 있습니다. 필요한 것만 연결하면 직선 연결이므로 for path 트릭이 더 쉽습니다.

+0

CONCAT 함수가 매우 유용합니다. – gbn

관련 문제