2014-01-10 3 views
0

나는이 쿼리를 실행할 때이 두 테이블이왜 STUFF 및 FOR XML PATH가 연결되지 않습니다?

CREATE TABLE [dbo].[Things](
    [testid] [int] NOT NULL, 
    [testdesc] [varchar](10) NULL 
) ON [PRIMARY] 

CREATE TABLE [dbo].[ThingsStaging](
    [otherid] [int] NOT NULL, 
    [testid] [int] NOT NULL 
) ON [PRIMARY] 

INSERT INTO [dbo].[Things] ([testid], [testdesc]) VALUES (1, N'Stuff') 
INSERT INTO [dbo].[Things] ([testid], [testdesc]) VALUES (2, N'Things') 
INSERT INTO [dbo].[Things] ([testid], [testdesc]) VALUES (3, N'Orcs') 
INSERT INTO [dbo].[Things] ([testid], [testdesc]) VALUES (4, N'Grubs') 
INSERT INTO [dbo].[Things] ([testid], [testdesc]) VALUES (5, N'Shrooms') 

INSERT INTO [dbo].[ThingsStaging] ([otherid], [testid]) VALUES (1, 1) 
INSERT INTO [dbo].[ThingsStaging] ([otherid], [testid]) VALUES (1, 2) 
INSERT INTO [dbo].[ThingsStaging] ([otherid], [testid]) VALUES (1, 3) 
INSERT INTO [dbo].[ThingsStaging] ([otherid], [testid]) VALUES (2, 3) 
INSERT INTO [dbo].[ThingsStaging] ([otherid], [testid]) VALUES (2, 4) 

;with allThings(otherid, descs) 
as 
(
    select ts.otherid , 
    stuff ((select ', ' + blah.testdesc as [text()] 
      from (
       select distinct t.testdesc 
       from Things as t 
       where t.testid = ts.testid) as blah 
       for xml path('')), 1, 1, '') as stuffs 
    from ThingsStaging as ts 
) 
select * 
from allThings 

지금, 나는

otherid stuffs 
1 Stuff 
1 Things 
1 Orcs 
2 Orcs 
2 Grubs 

얻을 수있다 그러나 나는 가야 :

otherid  stuffs 
1  Stuff, Things, Orcs 
2  Orcs, Grubs 

내가 난 무엇을 이해하지 못하는거야 잘못하고있다.

답변

0

내가 잘못한 것을 이해합니다. 코드가 더 잘 설명됩니다.

select otherid, stuff((select ', ' + t.testdesc as [text()] 
         from Things as t 
         inner join ThingsStaging as its on t.testid = its.testid 
         where its.otherid = ts.otherid 
         for xml path('')), 1, 1, '') as descs 
from ThingsStaging as ts 
group by otherid