• --An alternative without ROW_NUMBER()

    --How about this?

    select distinct

    u.UserID

    , stuff((

    select ', ' + u2.RoleName

    from @UserRole u2

    where u2.UserID = u.UserID

    and u2.RoleAssignedDate = (

    select min(u3.RoleAssignedDate)

    from @UserRole u3

    where u3.UserID = u2.UserID

    and u3.RoleName = u2.RoleName

    )

    order by u2.RoleAssignedDate asc

    for xml path('')

    ), 1, 2, '') 'RoleName'

    from @UserRole u