2016-06-20 2 views
0

最初のテーブルは、その年のFTEを変更している従業員のデータを示しています。それに基づいて、私は2番目のテーブル(ショーの欠席)を調整したいと思います。fteテーブルを複数行に変換

発生していない場合は、FTEを提示する必要があります。たとえば、最初の行(2番目のテーブルから)は2016-05-09 - 2016-05-09となりましたので、FTEは0.74になります。

問題が

は、あなたがこのような更新で私を助けてもらえます(下の画像に示されている)不在は3異なるFTE最初のテーブルから変更する時に起こった(不在テーブルで)第二列で起こったのか?私の期待される結果は3番目の表にあります。

enter image description here

+0

エッジケースではどうなりますか?したがって、不在期限が過ぎると、どのFTE値が選択されているかを2016-04-04としますか? –

+0

良い点。ありがとう。私はそれをより高い日付にするべきだと思います。だからあなたの例では、FTEは0.74 – user3030648

+0

でなければなりません。そして、境界を越える日付があります.2016-04-02と2016-04-07の間の不在がどのように処理されるべきですか?私はあなたがSQLを書くことに着手する前に、すべての要件と可能な条件を考慮する必要があると思います。 –

答えて

0

これは、要件が複数のFTEの日付の範囲を囲む日付範囲を扱うときに合併症があるので、より正確に定義する必要があなたの例では結果

update a 
    set a.type=FTE.FTE 
    from Absense a 
    inner join FTE on a.Start_date>=fte.Start_date and a.EndDate<=fte.End_Date 
    where FTE.type is null 

しかしを果たしていきます。日付とクロスバウンダリのエッジケースの「ルール」が明確に定義されると、正しいクエリはこれより複雑になる可能性があります。

+0

ご協力ありがとうございます。私は – user3030648

+0

のようなことをしました。[ID] \tの場合、[開始日]> = f。[開始日] THEN a。[開始日] ELSE f。[開始日]終了日[開始日] \t、ケースアップ【END_DATE] \t AS [END_DATE <= F [END_DATE] THEN [END_DATE] ELSE F [END_DATE] END、[タイプ] \t、F。[FTE] Absence_table FROM LEFTはF上FTE_tableをJOIN。[ID]はF = [ID] \t \t \t \t AND [START_DATE] = F。[スターt_date] – user3030648

+0

別のフォーラムからその回答を得ました – user3030648

関連する問題