make a decision more understandable for humans
Sorry, this is the best I can do with your requirement.
SQL Fiddle
Setting up the MS SQL Server 2008 schema :
create table YourTable ( ParentID int, ChildName varchar(10) ); insert into YourTable values (1, 'Max'), (1, 'Jessie'), (2, 'Steven'), (2, 'Lucy'), (2, 'Jake'), (3, 'Mark');
Request 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
Results :
| PARENTID | CHILDNAMES | ------------------------------------ | 1 | Max and Jessie | | 2 | Steven, Lucy and Jake | | 3 | Mark |
source share