sql >> データベース >  >> RDS >> Sqlserver

SQLServerで3つ以上のテーブルを水平方向に連結します

    ローンをファミリーテーブルの行に「順次」割り当てようとしているようです。これを解決するためのアプローチは、最初に適切な行を取得し、次に行に割り当てられたローンを取得することです。

    右の行(および最初の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;
    

    これは、特定の従業員のローンの割り当て順序を保証するものではないことに注意してください。データには、より一貫性のある割り当てを処理するのに十分な情報がないようです。



    1. PHPを使用してmysqlの複数の列を更新する方法

    2. MyBatis<挿入>マップされたメソッドからの戻り値

    3. sql:DELETE+INSERTとUPDATE+INSERT

    4. 複数の昇順がMysqlで機能していません