Ich bin ein bisschen stecken meine timelogs Tabelle in der Abfrage die folgenden sind die Beispieldaten:Verschwenkung timelogs in SQL-Abfrage
TimelogId EmployeeId RecordDate RecordTime Type
--------- ---------- ---------- ---------- ----
1 4 2016-07-01 07:18:37 1
2 4 2016-07-01 12:03:14 2
5 4 2016-07-01 12:08:02 1
6 4 2016-07-01 18:02:03 2
7 6 2016-07-19 07:24:15 1
8 5 2016-07-19 07:26:03 1
9 6 2016-07-19 12:15:26 2
10 5 2016-07-19 12:35:17 2
13 5 2016-07-19 12:36:14 1
16 6 2016-07-19 12:45:45 1
17 6 2016-07-19 17:10:22 2
18 5 2016-07-19 18:43:09 2
Die erforderliche Leistung:
Date EmployeeId Time_In Time_Out Time_In Time_Out
------- ---------- -------- -------- ------- -------
2016-07-01 4 07:18:37 12:03:14 12:08:03 18:02:03
2016-07-19 6 07:24:15 12:15:26 12:45:45 17:10:22
2016-07-19 5 07:26:03 12:35:17 12:36:14 18:43:08
Wo Type
(1) = time in und Type
(2) = Timeout.
Die Mitarbeiter müssen sich bei 12nn abmelden und sich nach einigen Minuten erneut anmelden.
Ich versuchte mit Pivot basierend auf den vorherigen Fragen, die ich hier gelesen habe. Obwohl dies das erste Mal ist, dass ich versucht habe, Pivot in Tabellen zu verwenden.
select
*
FROM
(
select
EmployeeID,
RecordDate,
RecordTime,
Type
from tblTimeLogs
) d
PIVOT(
Max(RecordTime) <---- I think the problem is right around here
FOR Type in ([1],[2]) <----- plus i can't seem to rename this column names maybe i'll read a little further on this.
) piv;
Ausgabe der Abfrage:
EmployeeID RecordDate 1 2
---------- ---------- ------ ------
4 2016-07-01 12:08:02 18:02:03
5 2016-07-19 12:36:14 18:43:09
6 2016-07-19 12:45:45 17:10:22
ist das möglich? Vielen Dank. : D
Edit:
wie vercelli vorgeschlagen, zum Beispiel ein anderes Szenario, wie der Benutzer vergessen, dass er/sie vor in nur ein paar Minuten zeitlich bereits so getaktet sie wieder in. z.B.
TimelogId EmployeeId RecordDate RecordTime Type
--------- ---------- ---------- ---------- ----
1 4 2016-07-01 07:18:37 1
2 4 2016-07-01 12:03:14 2
5 4 2016-07-01 12:08:02 1
6 4 2016-07-01 18:02:03 2
7 6 2016-07-19 07:24:15 1
8 5 2016-07-19 07:26:03 1
9 6 2016-07-19 12:15:26 2
10 5 2016-07-19 12:35:17 2
13 5 2016-07-19 12:36:14 1
16 6 2016-07-19 12:45:45 1
17 6 2016-07-19 17:10:22 2
18 5 2016-07-19 18:43:09 2
19 5 2016-07-20 08:13:35 1 <--- Time in
20 5 2016-07-20 08:14:35 1 <--- Timed In again
21 5 2016-07-20 12:15:12 2 <--- Time Out
Ich habe versucht, die Abfrage von Herrn Vercelli mit:
select
EmployeeID as Emp, RecordDate, [1] as Time_In1, [2] as Time_Out1, [3] as Time_In2, [4] as Time_out2
FROM
(
select
EmployeeID,
RecordDate,
RecordTime,
ROW_NUMBER() over (partition by EmployeeId, RecordDate order by RecordTime, type) as rn
from tblTimeLogs
) d
PIVOT(
max(RecordTime)
FOR rn in ([1],[2],[3],[4])
) as piv;
Ausgabe der neuen Abfrage:
Emp RecordDate Time_In1 Time_Out1 Time_In2 Time_Out2
---- ---------- --------- --------- -------- ---------
4 2016-07-01 07:18:37 12:03:14 12:08:02 18:02:03
5 2016-07-19 07:26:03 12:35:17 12:36:14 18:43:09
5 2016-07-20 08:13:35 08:14:35 12:15:12 Null <--- the problem is right around this portion
6 2016-07-19 07:24:15 12:15:26 12:45:45 17:10:22
Erwartete Ausgabe:
Emp RecordDate Time_In1 Time_Out1 Time_In2 Time_Out2
---- ---------- --------- --------- -------- ---------
4 2016-07-01 07:18:37 12:03:14 12:08:02 18:02:03
5 2016-07-19 07:26:03 12:35:17 12:36:14 18:43:09
5 2016-07-20 08:13:35 12:15:12 08:14:35 Null <--- the second time in would fall on the second 5th column (Time_In2) since the **Type** value is = 1
6 2016-07-19 07:24:15 12:15:26 12:45:45 17:10:22
Vielen Dank für die Hilfe Jungs: D. Ich lerne neue Dinge aus diesem Problem.
Vielen Dank für Ihre Antwort. Sortiert die Abfrage die Ergebnisse oder die Zeile basierend auf dem darin enthaltenen 'type'-Wert? : D Ich habe versucht, hier ein Beispiel zu erstellen [link] (https://data.stackexchange.com/meta.stackexchange/query/514106/pivoting-timelogs-in-sql-query2). Wie zum Beispiel hat sich der Benutzer zweimal angemeldet, seit er vergessen hat, dass sie sich gerade erst eingeloggt hat. – jkw
@jkw Ich sehe, was du meinst, aber wie würdest du es zeigen? Bitte bearbeiten Sie Ihre Frage, um dieses neue Szenario zu zeigen – vercelli
Ich habe die Frage Sir aktualisiert. Nochmals vielen Dank: D. – jkw