1

xml auto를 사용하여 집계 쿼리에서 필드를 연결하는 방법을 알고 있습니다. 하지만 두 테이블과 함께 사용하도록 쿼리를 확장하는 데 문제가 발생했습니다. 다음 예제는 작동하지 않습니다.두 테이블을 결합하는 문자열을 결합하는 집계 함수?

예.

set nocount on; 
declare @FirstTable table (RowID int, LinkedField int) 
insert into @FirstTable VALUES (1,1) 
insert into @FirstTable VALUES (2,2) 
insert into @FirstTable VALUES (2,3) 
insert into @FirstTable VALUES (2,4) 
insert into @FirstTable VALUES (3,5) 
insert into @FirstTable VALUES (3,1) 

declare @SecondTable table (LinkedField int, Field2Show int) 
insert into @SecondTable VALUES (1,11) 
insert into @SecondTable VALUES (2,12) 
insert into @SecondTable VALUES (3,13) 
insert into @SecondTable VALUES (4,14) 
insert into @SecondTable VALUES (5,15) 

/* 
output i need: 

RowID  ChildValues 
----------- ------------------- 
1   11 
2   12,13,14 
3   11,15 
*/ 

SELECT t1.RowID, 
STUFF(
      (SELECT ', ' + t2.Field2Show 
      FROM 
       (SELECT @SecondTable.Field2Show, @SecondTable.LinkedField 
       FROM @SecondTable 
       INNER JOIN @FirstTable ON   @[email protected]) t2 
      WHERE t1.LinkedField = t2.LinkedField 
      ORDER BY t2.Field2Show 
      FOR XML PATH(''), TYPE).value('.','varchar(max)') ,1,2, '') AS ChildValues 
FROM @FirstTable t1 
GROUP BY t1.RowID 

답변

2

당신은 최종 결과를 얻기 위해 다음에 질문을 변경 할 수 있어야한다 :

SELECT distinct t1.RowID, 
STUFF(
      (SELECT ', ' + cast(t2.Field2Show as varchar(10)) 
      FROM @SecondTable t2 
      INNER JOIN @FirstTable t -- join on @FirstTable based on LinkedField 
       on t.LinkedField = t2.LinkedField 
      WHERE t1.RowID = t.RowID -- associate the RowId from FirstTable to concatenate 
      ORDER BY t2.Field2Show 
      FOR XML PATH(''), TYPE).value('.','varchar(max)') ,1,2, '') AS ChildValues 
FROM @FirstTable t1; 

는 참조 SQL Fiddle with Demo

관련 문제