2012-07-19 52 views
0

可能重複:
Simulating group_concat MySQL function in MS SQL Server 2005?SQL自連接來連接柱

我有兩個表,即ServiceEntryPartPart。一個服務條目可能有多個部分。我試圖做的是連接不同部分的相同服務條目。我尋找的最後一項是利用部分ID在前,後跟一個蒂爾達和部分說明後面是有東西像下面的」

ServiceEntryID  PartDescription 
     3   2 ~ xyz Manager | 3 ~ Elevator 

在列部分描述,不同的部分ID在一列連接起來管道字符,並在serviceentry部分不同的部件相同的格式。任何幫助將appriciated。感謝

請找結構下

dbo.ServiceEntryPart 
ID ServiceEntryID PartID 
266 2    1 
234 3    2 
234 3    3 
233 5    4 

dbo.Part 
ID PartDescription 
1 Sample Manager 
2 xyz Manager 
3 Elevator 
+1

什麼數據庫版本? – 2012-07-19 22:03:12

+0

的標題是不同的,但它正是你想要的 - 在SQL服務器使用GROUP_CONCAT性的東西。 – 2012-07-19 22:03:57

+0

sql server 2008 – user1475788 2012-07-19 22:04:45

回答

1
SELECT ServiceEntryID, PartDescription = 
    STUFF((SELECT ' | ' + CAST(b.ID AS NVARCHAR) + ' ~ ' + PartDescription 
      FROM Part b 
      INNER JOIN ServiceEntryPart c 
       ON c.PartId = b.ID 
      WHERE c.ServiceEntryID = a.ServiceEntryID 
      FOR XML PATH('')), 1, 3, '') 
FROM ServiceEntryPart a 
GROUP BY ServiceEntryID 
0

在接下來的網址,你可以找到很多方法來做好這項工作,我建議你使用的黑箱XML方法該教程中所描述的,是做最簡單的方法。

Concatenating Row Values in Transact-SQL

這樣的事情...

SELECT dbo.ServiceEntryPart.ServiceEntryID, 
    (SELECT dbo.Part.ID + '~' + dbo.Part.PartDescription + ',' 
     FROM dbo.Part 
     WHERE dbo.ServiceEntryPart.PartID = dbo.Part.ID 
     ORDER BY dbo.Part.ID 
     FOR XML PATH('')) AS PartDescription 
    FROM dbo.ServiceEntryPart 
    GROUP BY dbo.ServiceEntryPart.ServiceEntryID