重复行

时间:2018-06-06 12:34:44

标签: sql-server sql-server-2008

我的桌子有以下记录。

SNO NAME TELNO
1   A    12345
2   A     
3   A   
4   B    78901
5   B    

我需要telno 12345的select语句应显示为姓名为'A'的员工SNO(1,2,3)

对于行SNO(4,5)的名称为“B”的员工,应显示

和telno no 78901。

示例输出

SNO NAME TELNO
1   A    12345
2   A    12345 
3   A    12345
4   B    78901
5   B    78901

1 个答案:

答案 0 :(得分:0)

一种方式是自我加入,假设名称是唯一的。你真的没有提供足够复杂的样本集。另一种方法是派生表。

declare @table table (SNO int, [NAME] char(1), TELNO int)
insert into @table
values
(1,'A',12345),
(2,'A',null),
(3,'A',null),   
(4,'B',78901),
(5,'B',null)  


select
    a.SNO
    ,a.NAME
    ,b.TELNO
from @table a
inner join @table b on b.NAME = a.NAME
where b.TELNO is not null


select
    a.SNO
    ,a.NAME
    ,b.TELNO
from @table a
left join (select name, max(TELNO) telno from @table group by name) b on b.NAME = a.NAME