2016-12-11 3 views
-4

MS SQLのemployee_id、日付、および間隔でスタッフの時間値を取得するために、スタッフタイムテーブルに参加する必要のある従業員テーブルがあります。MS SQLの最初のオカレンスに参加して値を取得するにはどうすればよいですか?

下の例を見ると、id 2と3の間隔が同じであることがわかります。この場合、同じemployee_id、日付、および間隔を持つレコードの最初の値には実際のスタッフ時間があり、残りのレコードにはゼロが必要です。ただし、これらのレコードのIDは異なります。

これを達成する方法を教えてください。みんなあなたの助けをありがとう!

EMPLOYEE表

Employee table

スタッフの時間

Staff Time

これは私が必要なものである:

enter image description here

はこれがあります何私がこれまで持っている:私は私が欲しいものを私に与えますが、それを簡素化するとにかくがあるクエリを思い付くことができています

enter image description here

+3

あなたの質問を編集して、(1)予想される出力と(b)既存のクエリを含めることができますか?これにより、簡単にクエリを修正することができます。また、どのデータベースソフトウェアを使用しているかを知ることも役立ちます。適切なタグを追加します。 – HABO

+0

こんにちは、生産しようとしている結果セットの例を追加してください。 – pacreely

+0

こんにちは、私はあなたが私のポストで要求しているものを追加しました。前もって感謝します。 – Mixer

答えて

0

select a.*, b.staff_time 
from employee a 
left join staff_time b on 
a.employee_id = b.Employee_ID 
and a.date = b.date 
and a.interval = b.interval 

とクエリ上記はこれを生産しますか?

select a.id,a.employee_id,a.date,a.interval,a.Staff_Time, 
    case when a.rankk = 1 then a.Staff_Time else 0 end new_Staff_Time 
    from 
    (select a.*, b.staff_time, 
    ROW_NUMBER() over (partition by a.employee_id,a.date,a.interval order by a.date DESC) as rankk 
    from employee a 
    left join staff_time b on 
    a.employee_id = b.Employee_ID 
    and a.date = b.date 
    and a.interval = b.interval) a 
    left join 
    (
    select a.*, b.staff_time 
    from employee a 
    left join staff_time b on 
    a.employee_id = b.Employee_ID 
    and a.date = b.date 
    and a.interval = b.interval 
    ) b on a.id <> b.id and 
    a.employee_id = b.Employee_ID 
    and a.date = b.date 
    and a.interval = b.interval 
+0

追加エイリアスを追加購入する必要があります。同じクエリ内で 'a'と' b'を何度も何度も何度も繰り返し使用しても、それを理解するのが簡単にはなりません。おそらく、数字と混同しやすい文字を使うことができます。 – HABO

関連する問題