;with cte
as
(select *,rn=row_number() over(partition by xinming order by newid()) from tb)
select xinming=case when rn=1 then xinming else '' end,
yuwen,
shuxue
from cte
select xinming=case when no=1 then xinming else '' end,yuwen,shuxue
from (select *,no=row_number() over(partition by xinming order by getdate() from tb))t