ローンをファミリーテーブルの行に「順次」割り当てようとしているようです。これを解決するためのアプローチは、最初に適切な行を取得し、次に行に割り当てられたローンを取得することです。
右の行(および最初の3列)は次のとおりです。
select f.EmpId, e.Name, f.Relationship
from family f join
Employee e
on f.empid = e.empid;
これは、繰り返される値の列にハイフンを配置するのではなく、実際の値を配置することに注意してください。 SQLでハイフンを配置することはできますが、それは悪い考えです。 SQLの結果はテーブルの形式であり、各列と各行の値を持つ順序付けられていないセットです。ハイフンを入れ始めるとき、あなたは順序に依存しています。
今問題はローンに参加することです。 row_number()
を使用すると、これは実際には非常に簡単です。 join
を追加するには キー:
select f.EmpId, e.Name, f.Relationship, l.LoanId
from Employee e left join
(select f.*, row_number() over (partition by f.EmpId order by (select NULL)) as seqnum
from family f
) f
on f.empid = e.empid left join
(select l.*, row_number() over (partition by l.EmpId order by (select NULL)) as seqnum
from Loan l
) l
on f.EmpId = l.EmpId and f.seqnum = l.seqnum;
これは、特定の従業員のローンの割り当て順序を保証するものではないことに注意してください。データには、より一貫性のある割り当てを処理するのに十分な情報がないようです。