2017-05-18 4 views
-2

私はEmpLogSQL Serverの複数のINとOUTと総労働時間の計算とその詳細

EmpLog表

  1. ID
  2. EMPID
  3. ステータス
  4. としてテーブル名を持っていますActionDateTime

Id - 主キー

EmpID - 従業員コード。 //たとえば、N100、N101、N200

ステータス - IN/OUT

ActionDateTime - 日付と時刻。 INまたはOUTログエントリの正確な発生。

Click for table structure


私は、特定の日付でストアドプロシージャを実行します。 テーブル内の各employeeidの総勤務時間数の結果を返す必要があります。

私たちは、選択した日付の同じ従業員に対して複数のIN/OUTを持つことがあります。任意のIN/OUTが、それはその従業員のために表示されるはずです欠落場合

は、出力形式の画像Expected Output result

を参照してください。選択された日付の奇数のINまたはOUT項目の例では、INまたはOUTのいずれかが欠落していることを示す必要があります。

ませ内外には、それはN/

+0

その人に「アウト」がない場合はどうなりますか?すべての「IN」に「OUT」があることが保証されていますか? –

+0

この投稿は少し鮮明になる可能性があります。 – Adam

+0

アウトされていない場合は、欠落として表示する必要があります。OUT同様のコンセプトです。 – Nehru

答えて

0

はそれぞれでのと仮定すると、表示されないはずがある場合があり、OUT充当し、順番に、あなたは以下のようにこれを取得するために、SQL Server 2012年の遅れを使用することができます。

select empcode, sum(hrs) as TotalWorkHours from (
select *,Hrs = datediff(MINUTE,ActionDate, lag(ActionDate, 1, ActionDate) over(partition by empcode order by ActionDate desc))/60.0 from employee 
where statuses = 'in' 
) a 
group by empcode 

サンプル入力クエリ:この要件のため

create table employee (id int identity(1,1), empcode int, [statuses] varchar(5), ActionDate datetime) 

insert into employee (empcode, statuses, ActionDate) values 
    (2,'in', dateadd(hour, -20, getdate())) 
, (2,'out', dateadd(hour, -19, getdate())) 
, (2,'in', dateadd(hour, -18, getdate())) 
, (2,'out', dateadd(hour, -17, getdate())) 
, (2,'in', dateadd(hour, -12, getdate())) 
, (2,'out', dateadd(hour, -10, getdate())) 
, (3,'in', dateadd(hour, -9, getdate()) ) 
, (3,'out', dateadd(hour, -6, getdate())) 
, (3,'in', dateadd(hour, -4, getdate()) ) 
, (3,'out', dateadd(hour, -1, getdate())) 

が出力:

+---------+----------------+ 
| empcode | TotalWorkHours | 
+---------+----------------+ 
|  2 |  8.000000 | 
|  3 |  5.000000 | 
+---------+----------------+ 
+0

総勤務時間とともに分を得る方法。 また、行方不明を表示する方法 と同じ行にempcode単位で出入りの一覧を表示したいと考えています。 – Nehru

+0

@Nehru、その質問が複雑なものであれば、それは言い直された質問の形でなければなりません。あなたの質問を明確にしてください。 –

+0

私は従業員のために複数のパンチイン&アウトを持つemplogテーブルを持っています。私は、特定の日付に働いた従業員の合計時間を計算します。 IN&OUTがある場合は、合計列に「MISSING IN/OUT」と表示されます。 – Nehru

関連する問題