加入多行从一个表到一行从另一个表
问题描述:
我看起来像这样的两个表:
第一:加入多行从一个表到一行从另一个表
IdlokoStav,洛科
12345,740 551-7
二:
idPersonalStav,个人,idLokostav
23456,有些哥们,12345
23457,另一个哥们,12345
结果应该是这样的:
洛科,Personal1,Personal2,personal3
740 551-7,有些哥们,哥们另,NULL
每个IdlokoStav最多可以有三个人,在得到这个后,我可以根据结果加入其他的东西。
Db是Microsoft SQL 2008.
编辑:我不在乎人们如何在结果中排序,只要包含所有三个匹配项。
答
通常情况下,您不希望将值放入单独的列中,如,以便在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
你如何知道第二个表中的排序顺序?哪一个是第一,第二,第三? –
当Dude被分配到Loko时,总有新的idPersonalStav。他们可以同时分配。由于他们创建时获得IdLokoStav,我认为这不应该是一个问题? – Savol
所以排序顺序是由'idPersonalStav'确定的? –