我正在尝试将一些数据汇总为一个报告,并且需要连接表之一的行值。这是基本的表结构:
评论
ReviewID ReviewDate
审稿人
ReviewerID ReviewID UserID
用户数
UserID FName LName
这是M:M关系。每个审阅可以有许多审阅者;每个用户可以与许多评论相关联。
基本上,我要查看的是Reviews.ReviewID,Reviews.ReviewDate和该评论的所有关联用户的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;
谁能帮我这个忙吗?任何帮助将不胜感激!
看看这个
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, 1 INSERT INTO @Reviewers SELECT 2, 1, 2 INSERT INTO @Reviewers SELECT 3, 1, 3 INSERT INTO @Reviewers SELECT 4, 2, 4 INSERT INTO @Reviewers SELECT 5, 2, 5 SELECT *, ( SELECT u.FName + ',' FROM @Users u INNER JOIN @Reviewers rs ON u.UserID = rs.UserID WHERE rs.ReviewID = r.ReviewID FOR XML PATH('') ) AS Products FROM @Reviews r