为了账号安全,请及时绑定邮箱和手机立即绑定

连接行值T-SQL

连接行值T-SQL

心有法竹 2019-07-27 14:15:51
连接行值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 ProductsFROM Northwind.dbo.Products p1GROUP BY CategoryId;任何人都可以帮我一把吗?任何帮助将不胜感激!
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

看看这个


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


查看完整回答
反对 回复 2019-07-27
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

事实证明,有一种更简单的方法可以做到这一点,不需要UDF:

select replace(replace(replace((cast((
        select distinct columnName as X        from tableName 
        for xml path('')) as varchar(max))), 
   '</X><X>', ', '),'<X>', ''),'</X>','')


查看完整回答
反对 回复 2019-07-27
?
FFIVE

TA贡献1797条经验 获得超6个赞

有类似的问题,并在玩代码15分钟后找到了一个甜蜜的解决方案

declare @result varchar(1000)select @result = COALESCE(@result+','+A.col1, A.col1)
                FROM (  select  col1                        from [table] 
                ) Aselect @result

返回结果为value1,value2,value3,value4

请享用 ;)


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 414 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信