Click here to Skip to main content
15,890,378 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
my (access_event_logs) table

[USERID]    [TIMESTAMPS]             [EVENTID]

1  019      2014-03-06 07:50:48.000   IN 
2  019      2014-03-06 17:02:39.000   OUT
3  019      2014-03-09 07:43:37.000   IN  
4  019      2014-03-09 14:34:59.000   OUT 
5  019      2014-03-10 07:43:34.000   IN 
6  019      2014-03-10 14:30:24.000   OUT


i want pivot table this columns

1) userid
2) date
3) in
4) out
5) total value (in and out) by date
Posted
Updated 1-Apr-14 7:38am
v2
Comments
Schatak 1-Apr-14 13:25pm    
can you please show your table structure ?
Maciej Los 1-Apr-14 13:43pm    
What you mean by [Total]?
akhil.krish 1-Apr-14 14:15pm    
hi maciej los thanks for reply...

total means user particular date in value 1, out value 1, total 2, some time only IN total value 1..
Maciej Los 1-Apr-14 14:17pm    
Please, see my answer.

1 solution

Please, see my comment to the question.

Try it:
SQL
SELECT userid, [IN], [OUT]
FROM (
    SELECT *
    FROM access_event_logs
    ) AS DT
PIVOT(MAX(timestamps) FOR eventid IN ([IN],[OUT])) AS PT


If [total] means the difference in hours, try it:
SQL
SELECT userid, [IN], [OUT], DATEDIFF(hh,[IN], [OUT]) AS TotalHrs
FROM (
    SELECT userid, [IN], [OUT]
    FROM (
        SELECT *
        FROM access_event_logs
        ) AS DT
    PIVOT(MAX(timestamps) FOR eventid IN ([IN],[OUT])) AS PT
) AS FT


See: DATEDIFF (sql)[^]


[EDIT]
Another solution:

SQL
CREATE TABLE #tmp (ID INT IDENTITY(1,1), [USERID] VARCHAR(10), [TIMESTAMPS] DATETIME, [EVENTID] VARCHAR(10))
 
INSERT INTO #tmp ([USERID], [TIMESTAMPS], [EVENTID])
VALUES('019', '2014-03-06 07:50:48.000', 'IN'),
('019', '2014-03-06 17:02:39.000', 'OUT'),
('019', '2014-03-09 07:43:37.000', 'IN'),
('019', '2014-03-09 14:34:59.000', 'OUT'),
('019', '2014-03-10 07:43:34.000', 'IN'),
('019', '2014-03-10 14:30:24.000', 'OUT'),
('020', '2014-03-10 07:40:14.000', 'IN'),
('020', '2014-03-10 14:31:28.000', 'OUT'),
('021', '2014-03-10 07:45:39.000', 'IN')
 
SELECT t1.RowNo, t1.[USERID], t1.CurrDate, t1.[IN], t2.[OUT], DATEDIFF(hh, t1.[IN], t2.[OUT]) AS WorkHrs
FROM (
    SELECT ROW_NUMBER() OVER( PARTITION BY [USERID] ORDER BY [TIMESTAMPS]) AS RowNo, [USERID], CONVERT(DATETIME, CONVERT(VARCHAR(10),[TIMESTAMPS],121)) AS CurrDate, [TIMESTAMPS] AS [IN]
    FROM #tmp
    WHERE [EVENTID] = 'IN'
    ) AS t1 INNER JOIN (
        SELECT ROW_NUMBER() OVER( PARTITION BY [USERID] ORDER BY [TIMESTAMPS]) AS RowNo, [USERID], CONVERT(DATETIME, CONVERT(VARCHAR(10),[TIMESTAMPS],121)) AS CurrDate, [TIMESTAMPS] AS [OUT]
        FROM #tmp
        WHERE [EVENTID] = 'OUT'
        ) AS t2 ON t1.RowNo = t2.RowNo AND t1.USERID  = t2.USERID 
 
DROP TABLE #tmp


[/EDIT]
 
Share this answer
 
v5
Comments
Maciej Los 1-Apr-14 14:21pm    
--wrong input--
Maciej Los 1-Apr-14 14:22pm    
OK, replace:
SELECT *
FROM access_event_logs

with
SELECT userid, timestamps, eventid
FROM access_event_logs
akhil.krish 1-Apr-14 14:25pm    
thanq so much.. Maciej los...this is working fine
i need u r mail id one more doubt is there.. pls send u r mail id.....
Maciej Los 1-Apr-14 14:30pm    
Sorry, but NO. There are rules. I you have any question, please post it via CP QA board.
If my answer was helpfull, please mark it as a solution (green button).
akhil.krish 1-Apr-14 14:41pm    
ok thanks for rply...

some time in two time or out time..but i want select the 1st in 1st out select same date and and some forget out , forget the IN that employee abesent another column..

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900