从SQL SERVER获取具有不同列和逗号分隔列的组合记录

从SQL SERVER获取具有不同列和逗号分隔列的组合记录,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有三张桌子 组 扩大 extension_Group是一个中间表,其中GroupID和ExtensionID作为引用id 我现在正在使用三个查询 基于GroupID从Extension_Group表中获取不同项的查询 select distinct GroupID from Extention_Group order by GroupID 用于从表中获取所需列的查询 select g.ID as GroupID, g.Name as GroupName, eg.ExtentionID fro

我有三张桌子

组 扩大 extension_Group是一个中间表,其中GroupID和ExtensionID作为引用id 我现在正在使用三个查询

基于GroupID从Extension_Group表中获取不同项的查询

select distinct GroupID from Extention_Group order by GroupID
用于从表中获取所需列的查询

select g.ID as GroupID, g.Name as GroupName, eg.ExtentionID from [Group] g 
inner join Extention_Group eg on eg.GroupId = g.Id  
inner join UserProfile up on eg.ExtentionID = up.UserProfileID
和查询以CSV逗号分隔的值获取扩展名

SELECT SUBSTRING(
(SELECT ',' + up.Extension
FROM userprofile up
ORDER BY up.Extension
FOR XML PATH('')),2,200000) AS CsvExtension
我真正想要的是将所有这些结果合并到一个表中。 如何将这三个结果合并到一个表中,以便轻松使用。
我已经尝试过联合,但没有成功。

可以这样组合

 select g.ID as GroupID, g.Name as GroupName, up.Extension, eg.ExtentionID
,stuff((SELECT ',' + up.Extension FROM userprofile up1 
FOR XML PATH('')),1,1,'') AS CsvExtension
,EG1.Groupid as [distinct Groupid] 
from [Group] g  
inner join Extention_Group eg on eg.GroupId = g.Id  
inner join UserProfile up on eg.ExtentionID = up.UserProfileID
inner join (select distinct GroupID from Extention_Group ) EG1 on eg.groupid=eg1.groupid
了解确切的关系和数据有助于优化它。我不知道它是如何工作的。也许你应该从xml路径选择中删除where子句