我已经研究了许多在SQL Server中模拟“ Group concat”功能的解决方案。我想做一个更具可读性的解决方案,但我不知道该怎么做。
我有一个观点:
ParentID | ChildName
其中包含记录,例如:
1 | Max 1 | Jessie 2 | Steven 2 | Lucy 2 | Jake 3 | Mark
我想将“群组Concat”获得以下这些信息:
1 | Max and Jessie 2 | Steven, Lucy and Jake 3 | Mark
因此,如果只有一个孩子,则返回名称;如果有多个孩子,则将最后两个孩子与“和”联系起来,将所有其他孩子与“,”联系起来。
我对不使用CLR而不愿意这样做的方法有些困惑。我对功能很满意-但是速度是一个问题,如何确定子代号,以便可以在’和’,’,’或’之间进行选择?
制作更具人性化的解决方案
抱歉,这是我能根据您的要求做的最好的事情。
SQL小提琴
MS SQL Server 2008架构设置 :
create table YourTable ( ParentID int, ChildName varchar(10) ); insert into YourTable values (1, 'Max'), (1, 'Jessie'), (2, 'Steven'), (2, 'Lucy'), (2, 'Jake'), (3, 'Mark');
查询1 :
with T as ( select ParentID, ChildName, row_number() over(partition by ParentID order by ChildName) as rn, count(*) over(partition by ParentID) as cc from YourTable ) select T1.ParentID, ( select case when T2.rn = 1 and T2.cc > 1 then ' and ' else ', ' end + T2.ChildName from T as T2 where T1.ParentID = T2.ParentID order by T2.rn desc for xml path(''), type ).value('substring(text()[1], 3)', 'varchar(max)') as ChildNames from T as T1 group by T1.ParentID
结果 :
| PARENTID | CHILDNAMES | ------------------------------------ | 1 | Max and Jessie | | 2 | Steven, Lucy and Jake | | 3 | Mark |