猿问

连接行值T-SQL

连接行值T-SQL

我试图将一些数据汇总到一个报告中,并需要连接其中一个表的行值。这是基本的表结构:


评测


 ReviewID  

 ReviewDate  

评审


 ReviewerID  

 ReviewID  

 UserID  

用户


UserID  

FName  

LName  

这是M:M的关系。每个评论都可以有很多评论者; 每个用户都可以与许多评论相关联。


基本上,我想要看的是Reviews.ReviewID,Reviews.ReviewDate,以及该Review的所有相关用户的FName的串联字符串(以逗号分隔)。


代替:


ReviewID---ReviewDate---User  

1----------12/1/2009----Bob  

1----------12/1/2009----Joe  

1----------12/1/2009----Frank  

2----------12/9/2009----Sue  

2----------12/9/2009----Alice  

显示这个:


ReviewID---ReviewDate----Users  

1----------12/1/2009-----Bob, Joe, Frank  

2----------12/9/2009-----Sue, Alice

我发现这篇文章描述了一些方法,但是大多数方法似乎只处理一个表而不是多个; 不幸的是,我的SQL-fu不够强大,无法根据我的情况进行调整。我对该网站上使用FOR XML PATH()的示例特别感兴趣,因为它看起来最干净,最直接。


SELECT p1.CategoryId,

( SELECT ProductName + ', '

  FROM Northwind.dbo.Products p2

  WHERE p2.CategoryId = p1.CategoryId

  ORDER BY ProductName FOR XML PATH('')

) AS Products

FROM Northwind.dbo.Products p1

GROUP BY CategoryId;

任何人都可以帮我一把吗?任何帮助将不胜感激!


心有法竹
浏览 415回答 3
3回答

BIG阳

看看这个DECLARE @Reviews TABLE(        ReviewID INT,        ReviewDate DATETIME)DECLARE @Reviewers TABLE(        ReviewerID   INT,        ReviewID   INT,        UserID INT)DECLARE @Users TABLE(        UserID  INT,        FName  VARCHAR(50),        LName VARCHAR(50))INSERT INTO @Reviews SELECT 1, '12 Jan 2009'INSERT INTO @Reviews SELECT 2, '25 Jan 2009'INSERT INTO @Users SELECT 1, 'Bob', ''INSERT INTO @Users SELECT 2, 'Joe', ''INSERT INTO @Users SELECT 3, 'Frank', ''INSERT INTO @Users SELECT 4, 'Sue', ''INSERT INTO @Users SELECT 5, 'Alice', ''INSERT INTO @Reviewers SELECT 1, 1, 1INSERT INTO @Reviewers SELECT 2, 1, 2INSERT INTO @Reviewers SELECT 3, 1, 3INSERT INTO @Reviewers SELECT 4, 2, 4INSERT INTO @Reviewers SELECT 5, 2, 5SELECT  *,        (             SELECT  u.FName + ','            FROM    @Users u INNER JOIN                     @Reviewers rs ON u.UserID = rs.UserID            WHERE   rs.ReviewID = r.ReviewID            FOR XML PATH('')        ) AS ProductsFROM    @Reviews r

慕桂英4014372

事实证明,有一种更简单的方法可以做到这一点,不需要UDF:select&nbsp;replace(replace(replace((cast(( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;distinct&nbsp;columnName&nbsp;as&nbsp;X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;tableName&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;xml&nbsp;path(''))&nbsp;as&nbsp;varchar(max))),&nbsp; &nbsp;&nbsp;&nbsp;'</X><X>',&nbsp;',&nbsp;'),'<X>',&nbsp;''),'</X>','')

FFIVE

有类似的问题,并在玩代码15分钟后找到了一个甜蜜的解决方案declare&nbsp;@result&nbsp;varchar(1000)select&nbsp;@result&nbsp;=&nbsp;COALESCE(@result+','+A.col1,&nbsp;A.col1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;(&nbsp;&nbsp;select&nbsp;&nbsp;col1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;[table]&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;Aselect&nbsp;@result返回结果为value1,value2,value3,value4请享用 ;)
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答