0

我在 sqlserver 中有一个表

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

另一个表有上表的 FK

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

我需要如下结果

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

我使用了连接,但它为每一行提供了多条记录,但我需要如上所述的结果。有人可以帮助我如何获得这种类型的输出吗?

4

2 回答 2

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

或者您可以使用CROSS APPLYand FOR 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

于 2013-04-11T11:05:44.707 回答
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]

我从这里借了一些概念

SQL小提琴

于 2013-04-11T10:44:00.413 回答