加入多行从一个表到一行从另一个表

问题描述:

我看起来像这样的两个表:
第一:加入多行从一个表到一行从另一个表

IdlokoStav,洛科
12345,740 551-7

二:

idPersonalStav,个人,idLokostav
23456,有些哥们,12345
23457,另一个哥们,12345

结果应该是这样的:

洛科,Personal1,Personal2,personal3
740 551-7,有些哥们,哥们另,NULL

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

编辑:我不在乎人们如何在结果中排​​序,只要包含所有三个匹配项。

+0

你如何知道第二个表中的排序顺序?哪一个是第一,第二,第三? –

+0

当Dude被分配到Loko时,总有新的idPersonalStav。他们可以同时分配。由于他们创建时获得IdLokoStav,我认为这不应该是一个问题? – Savol

+0

所以排序顺序是由'idPersonalStav'确定的? –

通常情况下,您不希望将值放入单独的列中,如,以便在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; 

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

+0

谢谢,这正是我所需要的,我只需要将最多三个人的姓名添加到已完成的查询中,无需进一步加入。 – Savol