2013-04-11 15 views
0

我有一个表中的sqlserver从所存储的由逗号分隔的步骤

UserID(PK) Name PhoneNumber 
1    Test  123456 
2    Test1 356456 

并且具有高于表中的FK另一个表

ID RequestID UserID(FK) 
    1  2
    2  20245  1 
    3  21545  2 

我需要效果如下获得值

UserID Name  phoneNumber RequestID 
1  Test  123456  20123,20245 
2  Test1  356456  21545 

我曾经使用过连接,但是每行都给出了多条记录,但是我需要如上的结果。 任何人都可以帮助我如何得到这种类型的输出?

回答

1

有几种不同的方式,可以这样做。

使用FOR XML PATHSTUFF

select u.userid, 
    u.name, 
    u.phonenumber, 
    STUFF((SELECT distinct ', ' + cast(r.requestid as varchar(10)) 
     from requests r 
     where u.userid = r.userid 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,2,'') requests 
from users u; 

SQL Fiddle with Demo

或者你可以使用CROSS APPLYFOR XML PATH

select u.userid, 
    u.name, 
    u.phonenumber, 
    left(r.requests, len(r.requests)-1) requests 
from users u 
cross apply 
(
    select cast(r.requestid as varchar(10)) + ', ' 
    from requests r 
    where u.userid = r.userid 
    FOR XML PATH('') 
) r (requests); 

SQL Fiddle with Demo

+0

非常感谢,它的工作对我来说 – 2013-04-11 12:11:19

1
SELECT [UserID] 
    , [Name] 
    ,[PhoneNumber] 
    , stuff((SELECT distinct ' ,'+ CAST(RequestID AS VARCHAR) 
     FROM [Request] 
     WHERE (UserID = [PK].UserID) 
     FOR XML PATH ('')),1,2,'' 
    ) AS Request1 
FROM [PK] 

I borrowed some concept from here

SQL Fiddle