• Well just to put in query terms what wagner have just suggested

    DECLARE @AllPhones VARCHAR(1000),@Count INT,@maxcount int,@mincount int,@codname varchar(100),@rowcounted int,

    @Row int,@codename varchar(100)

    SET @AllPhones = ''

    create table #Results(codname varchar(1000), PhoneNo varchar(1000))

    create table #TempTbl(rowid int identity(1,1),

    codname varchar(1000), rowcounted int)

    create table #TempTbl2(rowid int identity(1,1),

    codname varchar(1000), phonenumber varchar(100))

    insert into #TempTbl

    SELECT TU.codName , count(*)

    FROM dbo.tblPhone P

    INNER JOIN dbo.tblUser TU ON P.codUser = TU.codUser

    INNER JOIN dbo.tblPhoneType PT ON P.codPhoneType = PT.codPhoneType

    group by TU.codName

    insert into #TempTbl2

    SELECT TU.codName ,

    CASE WHEN P.ListThisNumber = 1

    THEN P.PhoneNumber ELSE '***********'END

    FROM dbo.tblPhone P

    INNER JOIN dbo.tblUser TU ON P.codUser = TU.codUser

    INNER JOIN dbo.tblPhoneType PT ON P.codPhoneType = PT.codPhoneType

    select @mincount = min(rowid) from #TempTbl

    select @maxcount = max(rowid) from #TEmpTbl

    select @Count = @mincount

    While @Count < = @maxcount

    begin

    select @codename = codname , @rowcounted = rowcounted

    from #TempTbl

    where rowid = @Count

    select @AllPhones = @AllPhones + ISNULL(phonenumber,'') + ','

    from #TempTbl2

    where codname = @codename

    insert into #Results values(@codename , @AllPhones)

    set @Count = @Count + 1

    SET @codename = ''

    SET @AllPhones = ''

    end

    select * from #Results

    drop table #TempTbl

    drop table #TempTbl2

    drop table #Results

    Well this is ofcourse not a pretty query ...nevertheless worth a look and definitely an alternate solution to cursors.....