SQL Server创建动态列Login1、Login2、Login3

SQL Server创建动态列Login1、Login2、Login3,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要一个SQL语句来读取此表: 这将返回一天中所有登录的动态列,按EmployeeId分组 EmployeeId, Login1, Logoff1, Login2, Logoff2, Login3, Logoff3 测试数据 查询 结果 如何识别您的表中的用户?对不起,我修复了,考虑源表中的EnabeID列,如果我没有错的话,OP需要用户一天的登录。太棒了!如何在此SQL中添加筛选器?例如TimeSheet.TimeSheetType=1,TimeSheet.LoginTime介于:sta

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

这将返回一天中所有登录的动态列,按
EmployeeId
分组

EmployeeId, Login1, Logoff1, Login2, Logoff2, Login3, Logoff3
测试数据 查询 结果
如何识别您的表中的用户?对不起,我修复了,考虑源表中的EnabeID列,如果我没有错的话,OP需要用户一天的登录。太棒了!如何在此SQL中添加筛选器?例如TimeSheet.TimeSheetType=1,TimeSheet.LoginTime介于:startDate和:endDate之间。我还可以使LoginTime_X动态(如果一个用户有20个不同的登录/注销,则返回20列?)。还可以按日期分组(员工、日期)
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                    ║
╚════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╝