C# 在SQL Server 2008 R2上获取重复行并将其压缩为一行?

C# 在SQL Server 2008 R2上获取重复行并将其压缩为一行?,c#,sql,sql-server,sql-server-2008,C#,Sql,Sql Server,Sql Server 2008,我正试图在SQL Server中编写一个存储过程,以消除C#程序中的一些逻辑。我现在要做的是查询在视图中。然后我会列出一个视图列表 List<MyView> listOrdered = new List<MyView>(); 因此,我在C#中所做的是编写逻辑,即:(伪代码) 基本上它给了我: UID Name Age Children 1 John 50 Sally, Steve 但我不想在C#中使用这种逻辑,而是希望使用

我正试图在SQL Server中编写一个存储过程,以消除C#程序中的一些逻辑。我现在要做的是查询在视图中。然后我会列出一个视图列表

List<MyView> listOrdered = new List<MyView>();
因此,我在C#中所做的是编写逻辑,即:(伪代码)

基本上它给了我:

UID     Name     Age   Children
1       John     50    Sally, Steve
但我不想在C#中使用这种逻辑,而是希望使用存储过程。因此,我如何让SQL Server为每一行而不是多行组合子列

如果你还需要什么帮助,我会回应你


哦,伙计们,相信我,我也不想这样做。我使用的数据库是巨大而复杂的,用C#实现这一点是明智的,而且是可行的,但我被要求将在C#中实现这一点的函数转换为存储过程。我只是想看看这是否可行。

这说明了一个糟糕的表设计。在根代码处修复它,那么您的db或C代码中就不会有这种愚蠢的逻辑

而不是

people(UID, Name, Age, Child)
试一试


您可以离开年龄,而不是移动到出生日期,但这样做确实是一个更好的主意。

这是100%,毫无疑问,在您的应用程序代码中需要处理,而不是在数据库中

SQL在字符串操作操作中的性能相当差,尤其是与像
C
这样的迭代语言相比。您希望数据库向您传递实际数据,然后在应用程序层中显示要处理的数据


与应用程序代码中的版本相比,在SQL中解决此问题的任何尝试都会更慢,更难维护。

如果您想在数据库中执行此操作,则应该考虑在前端执行此操作

SELECT  UID,    
    Name, 
    Age,
    STUFF(
    (SELECT ',' + Child AS [text()]
            FROM parentChildren b
            WHERE a.UID = b.UID
    FOR XML PATH('')),1,1,'') [ChildConcat]
FROM parentChildren a

真的在你的代码中这样做。这就是这种逻辑的归属。注意:如果将数据库规范化为至少3NF,代码将变得更干净。
people(UID, Name, Age, Child)
people(UID, Name, DateOfBirth)  
children(Parent references people.UID, child references people.UID)
SELECT  UID,    
    Name, 
    Age,
    STUFF(
    (SELECT ',' + Child AS [text()]
            FROM parentChildren b
            WHERE a.UID = b.UID
    FOR XML PATH('')),1,1,'') [ChildConcat]
FROM parentChildren a