SQL SELF JOIN加入列

时间:2012-07-19 22:00:29

标签: sql

  

可能重复:
  Simulating group_concat MySQL function in MS SQL Server 2005?

我有两张表ServiceEntryPartPart。一个服务条目可以有多个部分。我想要做的是连接相同服务条目的不同部分。我正在寻找的最后一项是“

 ServiceEntryID     PartDescription
       3            2 ~ xyz Manager | 3 ~ Elevator

在“列部分描述”中,通过首先使用部件ID后跟tilda和部件描述,后跟管道字符以及serviceentry部件中不同部件的相同格式,将不同的部件ID连接在一列中。任何帮助都会得到满足。感谢

请找到下面的结构

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

答案 2 :(得分: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