Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用SQL查询此数据?_C#_.net_Sql - Fatal编程技术网

C# 如何使用SQL查询此数据?

C# 如何使用SQL查询此数据?,c#,.net,sql,C#,.net,Sql,我正在研究考勤管理系统 我的表数据如下所示: LogId EmployeeId LogTime Date 31 22 09:44:00 AM 2011-11-04 00:00:00.000 40 22 01:51:00 PM 2011-11-04 00:00:00.

我正在研究考勤管理系统

我的表数据如下所示:

LogId      EmployeeId      LogTime                          Date
31         22               09:44:00 AM                    2011-11-04 00:00:00.000
40         22               01:51:00 PM                    2011-11-04 00:00:00.000
43         22               02:14:00 PM                    2011-11-04 00:00:00.000 
45         22               07:36:00 PM                    2011-11-04 00:00:00.000
我想将第一个日志时间(09:44:00 AM)显示为开始时间,第二个日志时间(01:51:00 PM)显示为结束时间,第三个日志时间(02:14:00 PM)显示为开始时间等。。然后我要一份某一天所有时间的总结

SELECT ROW_NUMBER() OVER (PARTITION BY EmployeeId ORDER BY LogId) % 2 AS InTime,
       * FROM TimeStampTable
这将为时间1、3、5提供
InTime=1
。。。对于每个
EmployeeId
,其余的
InTime=0

我的解决方案:

select *, Case (ROW_NUMBER() over (ORDER BY LogId)) % 2 
When 1 Then 'In Time' Else 'Out Time' End as 'Row' from @Table
希望这就是你真正需要的

select CASE(N.Row) 
When 1 then N.LogTime Else null End as InTime, 
CASE(N.Row) When 0 then N.LogTime Else null End as OutTime, N.* from 
( select ROW_NUMBER() over (ORDER BY LogId) % 2 as 'Row',* from @Table ) N 

我试着把问题分成几个小问题来解决 SQL Server中可用的coalesce函数可用于我创建了一个名为timing的表,其中包含字段(logid、Employeeid、LogTime、Date)

可以使用以下查询来收集打孔记录

declare @Punch nvarchar(100)
set @punch=''

select @punch=Coalesce(cast(datepart(HH,logtime )as nvarchar)+':'+cast(datepart(MI,logtime )as nvarchar)+(case (row_number() over (order by logid))%2 when 0 then ' Out' else ' In' end)+','+@punch,@punch) from timing order by logid desc

select @punch as punches 
在这段时间里,你可以用这样的东西--


只是旁注。我会把时间和日期列结合起来,以避免午夜的虫子。我很确定我昨天看到了同样的问题…@AdamWenger:hehe-似曾相识,嗯?我想我们有一个家伙,所以他问那些“我如何…与时间/休息时间”广告nauseum已经。。。。我不确定那是标准考试还是大家偶然发现的东西……@marc_我之所以记得,是因为我最初的反应是在UI/Display/Reporting层完成这项工作;再次查看后,我有相同的想法。但我需要在单独的列中显示时间和结束时间,而不是在一列中。选择CASE(N.Row)当1时,然后选择N.LogTime Else null结束作为时间,CASE(N.Row)当0时,然后N.LogTime Else null结束作为结束时间,N.*from(选择Row_NUMBER()over(ORDER BY LogId)%2作为'Row',*from@Table)N
declare @duration int
set @duration=0
SELECT
   @duration = coalesce((case row_number() over (order by t1.logid) %2 
   when 1 
   then cast(datediff(mi,t1.logtime,isnull(t2.logtime,t1.logtime))as int) else 0 end)+@duration,@duration)
FROM
    timing AS t1
LEFT JOIN
   timing AS t2
      ON t2.logid = (SELECT MIN(logid) FROM timing WHERE logid > t1.logid)
select @duration