0

次の順序で出席データを保持するSQL2008テーブルがあります。

uidクロックcollectdateタイプ

 1 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000 in
 1 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000 in
 2 2012-10-30 16:13:07.000 2012-10-30 19:29:58.000 in
 2 2012-10-30 21:18:50.000 2012-10-30 22:29:58.000 in

適切な順序は、「タイプ」列を「入力」および「出力」にすることです。しかし、これはまさに私が直面している問題です。システムは、インパンチまたはアウトパンチを行う前に、タイムレコーダーで常に正しいボタンを押すのを見逃すか、まったく押さない請負業者やパートタイマーを管理するために使用されています。

現在、タイムレコーダーデータを適切な順序に並べるために、このストアドプロシージャに依存しています

    INSERT INTO出席TBL(UID、CollectDate、Clockin、Clockout)

選択する
UID
、CollectDate
、MAX(type ='in' then clock endの場合)clockin
、MAX(type ='Out'の場合はクロック終了)clockout
RAWCLOCKTBLから
GROUP BY UID、CollectDate
戻る

「タイプ」列を無視して、「クロック」値を正しい順序で同じ行に移動する方法はありますか。つまり、上記のテーブルをに移動します。

uid時計時計            
1 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000
2 2012-10-30 16:13:07.000 2012-10-30 21:18:50.000
4

1 に答える 1

0

次のクエリは、各日付のUIDのIN時間とOUT時間をグループ化し、UIDとDATEのJOINをグループ化して、目的の出力を取得します。LEFT JOINは、OUTなしでこれらのエントリを返すようにします(必要な場合)。

SELECT 
    A.UID, 
    CONVERT(DATE, clock) 'ClockDate', 
    min(clock) 'ClockIn', 
    max(clock) 'ClockOut'
FROM 
    attendanceTBL 
GROUP BY uid, CONVERT(DATE, clock)
于 2012-11-18T15:47:03.857 に答える