Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何组合一列中不同的重复行的列值?_Sql Server_Linq - Fatal编程技术网

Sql server 如何组合一列中不同的重复行的列值?

Sql server 如何组合一列中不同的重复行的列值?,sql-server,linq,Sql Server,Linq,我有一个查询,它选择包含重复行的行数,所有列的值都相同,只有一列除外,我们称之为X列。 我要做的是合并所有重复行中X列值的所有值,并用“,”字符分隔这些值。 我使用的查询: SELECT App.ID,App.Name,Grp.ColumnX FROM ( SELECT * FROM CustomersGeneralGroups AS CG WHERE CG.GeneralGroups_ID IN(1,2,3,4) ) AS GroupsCustomers LEFT JOIN Appoint

我有一个查询,它选择包含重复行的行数,所有列的值都相同,只有一列除外,我们称之为X列。
我要做的是合并所有重复行中X列值的所有值,并用“,”字符分隔这些值。
我使用的查询:

SELECT App.ID,App.Name,Grp.ColumnX
FROM (
 SELECT * FROM CustomersGeneralGroups AS CG WHERE CG.GeneralGroups_ID IN(1,2,3,4)
 ) AS GroupsCustomers
LEFT JOIN Appointments AS App ON GroupsCustomers.Customers_ID = App.CustomerID
INNER JOIN Groups AS Grp ON Grp.ID = GroupsCustomers.GeneralGroups_ID
WHERE App.AppointmentDateTimeStart > @startDate AND App.AppointmentDateTimeEnd < @endDate  
我想要的结果是:

ID        Name        ColumnX
1         test1        1,2,3
我不介意是否必须使用linq而不是sql来执行此操作。

我在linq中使用了GroupBy,但它合并了ColumnX值。

如果您在对象中加载了此数据,则可以使用linq方法实现此目的,如下所示:

var groupedRecords =
    items
    .GroupBy(item => new { item.Id, item.Name })
    .Select(grouping => new
        {
            grouping.Key.Id,
            grouping.Key.Name, 
            columnXValues = string.Join(",", grouping.Select(g => g.ColumnX))
        });
var groupedRecords =
    items
    .GroupBy(item => new { item.Id, item.Name })
    .Select(grouping => new
        {
            grouping.Key.Id,
            grouping.Key.Name, 
            columnXValues = string.Join(",", grouping.Select(g => g.ColumnX))
        });