0

Clock IN OUT Data に従ってシフトの詳細を計算する出席アプリケーションを開発しようとしています。以下はテーブルの詳細です

CREATE TABLE [dbo].[INOUTData](
    EmpID VARCHAR(10),
    CLockDate Date  NULL,
    [INTIME]  Time NULL,
    [OUTTIME]  Time NULL,
) ON [PRIMARY]

GO

INSERT INOUTData (   EmpID,   CLockDate,   [INTIME], [OUTTIME]  ) VALUES
(  'E1',   '28-Jan-2014', '07:50:00',  '10:15:00' ),
(  'E1',   '28-Jan-2014', '10:25:00',  '12:15:00' ),
(  'E1',   '28-Jan-2014', '17:15:00',  '20:55:00' ),

(  'E2',   '28-Jan-2014', '08:30:00',  NULL ),  -- First Session OUT punch missed
(  'E2',   '28-Jan-2014', '16:15:00',  '21:55:00' ),

(  'E3',   '28-Jan-2014', NULL,  '11:34:00' ),  -- First Session IN punch missed
(  'E3',   '28-Jan-2014', '16:15:00',  '19:55:00' ),
(  'E3',   '28-Jan-2014', '20:05:00',  '21:55:00' ),

(  'E4',   '28-Jan-2014', '08:30:00',  '11:34:00' ), 
(  'E4',   '28-Jan-2014', NULL,  '21:55:00' ), -- Second Session IN punch missed

(  'E5',   '28-Jan-2014', '10:35:00',  '13:44:00' ), 
(  'E5',   '28-Jan-2014',  '18:55:00' , NULL ) -- Second Session OUT punch missed

そしてShiftDetails

Create Table ShiftDetails
(
    ShiftId INT ,
    ShiftName VARCHAR(20),
    Session1StartTime  TIme ,
    Session1EndTime  TIme ,
    Session2StartTime  TIme ,
    Session2EndTime TIme 
)

Insert into ShiftDetails values
(1,'Break Shift', '08:00:00', '12:00:00', '17:00:00', '21:00:00'),
(2,'Break Shift2', '10:00:00', '14:00:00', '19:00:00', '23:00:00')

これら2つのテーブルを組み合わせて次のようにデータを取得しようとしています

EMpID   ClockDate       Session1StartTime   Session1EndTime     ActualSession1StartTime     ActualSession1EndTime   Session2StartTime   Session2EndTime     ActualSession2StartTime     ActualSession2EndTime 
E1      28-Jan-2014     08:00:00            12:00:00            07:50:00        12:15:00        17:00:00    21:00:00            17:15:00         20:55:00                                       
E2      28-Jan-2014     08:00:00            12:00:00            08:30:00        NULL            17:00:00    21:00:00            16:15:00                    21:55:00                                            
E3      28-Jan-2014     08:00:00            12:00:00            NULL                11:34:00        17:00:00    21:00:00            16:15:00           21:55:00                                             
E4      28-Jan-2014     08:00:00            12:00:00            08:30:00             11:34:00       17:00:00    21:00:00            NULL           21:55:00                                             
E5      28-Jan-2014     10:00:00            14:00:00            10:35:00        14:44:00        19:00:00    23:00:00            18:55:00           NULL

効果的な方法で達成する方法を親切に提案してください。現在、各レコードをトラバースして仕事をするストアドプロシージャを使用しています。

カーソルの代わりにピボット、またはクエリでそれを行う方法はありますか

4

0 に答える 0