我有两张看起来像这样的表:
第一:
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。
编辑:只要包括所有三场比赛,我都不关心人们在结果中的排序方式。
答案 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
个语句。