我需要一个SQL语句来读取这个表:

这将返回一天中所有登录的动态列,并按EmployeeId分组。
EmployeeId, Login1, Logoff1, Login2, Logoff2, Login3, Logoff3发布于 2015-04-06 23:27:53
试验数据
DECLARE @TABLE TABLE (EmployeeID INT, LoginTime DATETIME , LogoffTime DATETIME)
INSERT INTO @TABLE VALUES
( 49 , '2015-04-07 00:16:22.307' , '2015-04-07 00:16:30.307'),
( 49 , '2015-04-07 00:17:22.307' , '2015-04-07 00:17:39.307'),
( 8 , '2015-04-06 00:16:22.307' , '2015-04-06 00:16:30.307'),
( 8 , '2015-04-07 00:16:22.307' , '2015-04-07 00:16:28.307'),
( 55 , '2015-04-05 00:16:22.307' , '2015-04-07 00:16:22.307')查询
SELECT *
FROM (
SELECT EmployeeID
,Dates
, Login_Logoff + '_'
+ CAST(ROW_NUMBER() OVER
(PARTITION BY EmployeeID,Login_Logoff
ORDER BY Dates ASC) AS NVARCHAR(10)) AS [Login_Logoff]
FROM @TABLE
UNPIVOT (Dates FOR Login_Logoff IN (LoginTime,LogoffTime))up
) T
PIVOT (MAX(Dates)
FOR Login_Logoff
IN (LoginTime_1,LogoffTime_1,LoginTime_2,LogoffTime_2))p结果
╔════════════╦═════════════════════════╦═════════════════════════╦═════════════════════════╦═════════════════════════╗
║ EmployeeID ║ LoginTime_1 ║ LogoffTime_1 ║ LoginTime_2 ║ LogoffTime_2 ║
╠════════════╬═════════════════════════╬═════════════════════════╬═════════════════════════╬═════════════════════════╣
║ 8 ║ 2015-04-06 00:16:22.307 ║ 2015-04-06 00:16:30.307 ║ 2015-04-07 00:16:22.307 ║ 2015-04-07 00:16:28.307 ║
║ 49 ║ 2015-04-07 00:16:22.307 ║ 2015-04-07 00:16:30.307 ║ 2015-04-07 00:17:22.307 ║ 2015-04-07 00:17:39.307 ║
║ 55 ║ 2015-04-05 00:16:22.307 ║ 2015-04-07 00:16:22.307 ║ NULL ║ NULL ║
╚════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╝https://stackoverflow.com/questions/29480803
复制相似问题