I've seen this done with XML. I had to do some searching, but this might work.
Code:
declare @hcp table(provid int, specialty varchar(50), description char(20))
insert into @hcp(provid,specialty,description) values
(1,'Cardiovascular Disease', 'Primary'),
(1,'Internal Medicine ','Other'),
(1,'General Practice','Other')
select p.provid, specialty as 'Primary',o.OtherSpecialty
from @hcp p
Inner join (
select distinct t2.provid,
(Select t1.specialty + ' | ' AS [text()]
From @hcp t1
where t1.provid = t2.provid and description <> 'Primary'
order by t1.provid
for xml path ('')) [OtherSpecialty]
from @hcp t2) o on p.provid = o.provid
where p.description = 'Primary'