SQL Server创建动态列Login1、Login2、Login3
我需要一个SQL语句来读取此表: 这将返回一天中所有登录的动态列,按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
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 ║
╚════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╩═════════════════════════╝