在SQL Server 2012中转置时间戳数据
我有另一组数据,其中有多个时间戳在SQL Server 2012中转置时间戳数据,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有另一组数据,其中有多个时间戳 Name Timestamp Status ------------------------------------------ Ahmed 02/11/2016 1:03:37 PM Check In Ahmed 02/11/2016 3:42:21 PM Check In Ahmed 02/11/2016 7:00:49 PM Check In Ahmed 02/11/2016 7:00:55 P
Name Timestamp Status
------------------------------------------
Ahmed 02/11/2016 1:03:37 PM Check In
Ahmed 02/11/2016 3:42:21 PM Check In
Ahmed 02/11/2016 7:00:49 PM Check In
Ahmed 02/11/2016 7:00:55 PM Check In
Ahmed 03/11/2016 12:01:03 AM Check Out
Ahmed 03/11/2016 11:50:32 PM Check In
Ahmed 04/11/2016 11:45:00 AM Check Out
我试图得到如下输出
Name Check in date check out date check in time check out time
-----------------------------------------------------------------------
Ahmed 02/11/2016 03/11/2016 1:03:37 PM 12:01:03 AM
Ahmed 03/11/2016 04/11/2016 11:50:32 AM 11:45:00 PM
请帮忙试试这个:
select convert(varchar(10), checkin, 101) check_in_date,
convert(varchar(10), checkin, 101) check_out_date,
LTRIM(RIGHT(CONVERT(CHAR(20), checkin, 22), 11)) check_in_time,
LTRIM(RIGHT(CONVERT(CHAR(20), checkin, 22), 11)) check_out_time
from (
select name,
min(case when status = 'Check In' then timestamp end) checkin,
max(case when status = 'Check Out' then timestamp end) checkOut
from table
group by name, convert(varchar(10), timestamp, 101)) t;
返回
Name CheckInDate CheckOutDate CheckInTime CheckOutTime
Ahmed 02/11/2016 03/11/2016 01:03:37 PM 12:01:03 AM
Ahmed 03/11/2016 04/11/2016 11:50:32 PM 11:45:00 AM
在所有case语句中使用ELSE分支是个好主意。这样每个
name
只会生成一行。亲爱的Gurvinder。。。我在示例中给出的条件下尝试了这个方法,它给出了一个输出,第一个日期为签入,最后一个日期为签出。然而,我发现一些时间戳在签入或签出状态时丢失。在发布之前,您尝试了什么来解决这个问题,以及您遇到了什么错误?我建议你用谷歌搜索SQL缺口和孤岛问题,亲爱的约翰。。。。感谢您提供上述解决方案。它适用于我在示例中给出的条件,但是对于某些时间戳,没有签入或签出状态。你能帮个忙吗this@Michael也许您可以使用更好的示例集编辑您的问题,以及您希望如何处理/显示这些异常
Name CheckInDate CheckOutDate CheckInTime CheckOutTime
Ahmed 02/11/2016 03/11/2016 01:03:37 PM 12:01:03 AM
Ahmed 03/11/2016 04/11/2016 11:50:32 PM 11:45:00 AM