2014-10-29 38 views
0

你好,我有一個問題在不同的表中增加一個字段分隔符,例如。基本上我想連接具有相同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://stackoverflow.com/a/10381975/1048425)做了一些比大多數解釋如何使用'FOR XML'連接行到列的實際工作。 – GarethD 2014-10-29 08:05:56

回答

1

有一個同樣的問題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