无法弄清楚如何使用XML路径

时间:2018-08-02 08:41:53

标签: sql-server tsql for-xml-path

嗨,我已经尽力了,但是不知道该怎么做。

我有这张桌子“ T1”

----RID----PID----
     1      1      
     1      2     

我在RID上留下了另一个“ T2”,以获取PID的名称列:

----RID-----PID-----Pname----
     1      1        Task1
     1      2        Task2

到目前为止,一切都很好。但是我真正想要的是在这些列的表中:1.(不同的RID)2.(每个Rid中的PID数量)3.(所有PID名称的逗号分隔字符串)

----RID-----PID-----Pname----
     1       2      Task1,Task2

但是,如果一个RID仅具有一个Pname,那么这里应该没有逗号:

----RID-----PID-----Pname----
     1       2      Task1,Task2
     2       1      Task1

有人吗?我已经尝试过XML PATH,但无法弄清楚.....

1 个答案:

答案 0 :(得分:0)

完整的示例:

DECLARE @T1 TABLE
(
    [RID] INT
   ,[PID] INT
);

INSERT INTO @T1 ([RID], [PID])
VALUES (1, 1)
      ,(1, 2);

DECLARE @T2 TABLE
(
    [RID] INT
   ,[PID] INT
   ,[Pname] VARCHAR(12)
);

INSERT INTO @T2 ([RID], [PID], [Pname])
VALUES (1, 1, 'Task1')
      ,(1, 2, 'Task2');


SELECT T1.[RID] 
      ,COUNT(T1.[PID]) AS [PID]
      ,[value] AS [PName]
FROM @T1 T1
CROSS APPLY
(
    SELECT STUFF
    (
        (
            SELECT ',' + T2.[Pname]
            FROM @T2 T2
            WHERE  T2.[RID] = T2.[RID]          
            ORDER BY T2.[PID]
            FOR XML PATH(''), TYPE
        ).value('.', 'VARCHAR(MAX)')
        ,1
        ,1
        ,''
    )

) DS ([value])
GROUP BY T1. [RID]
        ,[value];

enter image description here