将一个表中的多个行连接到另一个表中的一行

时间:2015-10-14 14:15:06

标签: sql sql-server-2008

我有两张看起来像这样的表:
第一:

  

IdlokoStav,洛科
  12345,740 551-7

第二

  

idPersonalStav,personal,idLokostav
  23456,Some Dude,12345
  23457,另一个家伙,12345

结果应如下所示:

  

loko,Personal1,Personal2,personal3
  740 551-7,Some Dude,Another Dude,NULL

每一个IdlokoStav最多可以有三个人,在我得到这个之后,我可以根据结果加入其他东西。
Db是Microsoft SQL 2008。

编辑:只要包括所有三场比赛,我都不关心人们在结果中的排序方式。

1 个答案:

答案 0 :(得分:2)

通常,您不希望将值放在像这样的单独列中,以便在SQL 中进一步处理。一种方法是使用pivot;另一种是条件聚合。两者都依赖于row_number()函数:

select f.Idloko,
       max(case when seqnum = 1 then s.personal end) as personal1,
       max(case when seqnum = 2 then s.personal end) as personal2,
       max(case when seqnum = 3 then s.personal end) as personal3
from first f left join
     (select s.*,
             row_number() over (partition by IdlokoStav order by idPersonalStav) as seqnum
      from second s
     ) s
     on f.IdlokoStav = s.IdlokoStav
group by f.Idloko;

如果您发现自己有三个以上的名字,那么您需要在外部max()添加更多select个语句。