2015-10-14 121 views
0

我看起來像這樣的兩個表:
第一:加入多行從一個表到一行從另一個表

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'確定的? –

回答

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; 

如果你發現你有三個以上的名字,那麼你就需要在外部select添加更多max()語句。

+0

謝謝,這正是我所需要的,我只需要將最多三個人的姓名添加到已完成的查詢中,無需進一步加入。 – Savol

相關問題