使用不同的值连接SQL中的行

问题描述:

你好,我有一个问题在不同的表中增加一个字段分隔符,例如。基本上我想连接具有相同DocumentsID的所有值,并且必须具有不同的fieldid。如果它没有fieldid,请将其留空。希望这是有道理的。第一次在这里问。再次感谢。使用不同的值连接SQL中的行

DocumentsID Field ID Values 

    1   190  Jordan   
    1   191  Kobe 
    1   192  Rose 
    2   191  Kobe 

预期结果

DocumentsID Values 

    1  Jordan; Kobe; Rose 
    2   Kobe 
+2

而你在哪里试图解决它的代码? – SubqueryCrunch 2014-10-29 07:31:33

+0

[以前的答案我已经完成](http://*.com/a/10381975/1048425)做了一些比大多数解释如何使用'FOR XML'连接行到列的实际工作。 – GarethD 2014-10-29 08:05:56

有一个同样的问题here,你可以参考。

我修改了接受的答案中使用的查询,以适合您的示例。

set nocount on; 
declare @YourTable table (DocumentID int, FieldID int, [Values] varchar(50)) 

insert into @YourTable VALUES (1,190,'Jordan') 
insert into @YourTable VALUES (1,191,'Kobe') 
insert into @YourTable VALUES (1,192,'Rose') 
insert into @YourTable VALUES (2,191,'Kobe') 
set nocount off 

SELECT DISTINCT 
t1.DocumentID 
    ,STUFF(
       (SELECT 
        ', ' + t2.[Values] 
        FROM @YourTable t2 
        WHERE t1.DocumentID=t2.DocumentID 
        ORDER BY t2.[Values] 
        FOR XML PATH(''), TYPE 
       ).value('.','varchar(max)') 
       ,1,2, '' 
     ) AS [Values] 
FROM @YourTable t1 
GROUP BY t1.DocumentID,t1.[Values] 
+0

注意事项 - 如果从GROUP BY子句中删除“t1。[values]”,则不需要使用“DISTINCT”(在这种情况下也是不必要的)。进行这些更正将使查询更高效。 – GarethD 2014-10-29 08:07:21