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

时间:2012-01-26 22:26:19

标签: sql-server linq

我有一个查询,它选择包含重复行的行数,所有列的值都相同,只有一列让我们称之为X列。
我想要做的是在所有重复的行中组合X列值的所有值,并用','char。分隔值 我使用的查询:

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  

不同的列是ColumnX,列ID和名称是相同的,但ColumnX将是不同的 例如:
如果查询将返回如下行:

ID        Name        ColumnX
1         test1         1
1         test1         2
1         test1         3

我想要的结果是:

ID        Name        ColumnX
1         test1        1,2,3

我不介意我是否必须使用linq而不是sql 我在linq中使用了GroupBy,但它合并了ColumnX值。

1 个答案:

答案 0 :(得分:0)

如果您在对象中加载了此数据,则可以使用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))
        });