嗨,我已经尽力了,但是不知道该怎么做。
我有这张桌子“ 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,但无法弄清楚.....
答案 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];