Sql 如何在计算中使用where子句创建计算字段

Sql 如何在计算中使用where子句创建计算字段,sql,sql-server,Sql,Sql Server,我试图在数据库中计算每天工作的小时数。我们的表中有两列与此相关。InOut是一个包含1或0(1=打孔输入,0=打孔输出)的列,然后是punchdatetime。如何使用这两个字段来计算每天工作的小时数 我试着从打卡时间中减去打卡时间,但那不起作用 select PunchMonth, PunchDay, PunchYear, ((PunchDateTime where InOut = 0) - (punchdatetime where InOut = 1)) from Punc

我试图在数据库中计算每天工作的小时数。我们的表中有两列与此相关。InOut是一个包含1或0(1=打孔输入,0=打孔输出)的列,然后是punchdatetime。如何使用这两个字段来计算每天工作的小时数

我试着从打卡时间中减去打卡时间,但那不起作用

select PunchMonth, PunchDay, PunchYear, 
      ((PunchDateTime where InOut = 0) - (punchdatetime where InOut = 1))
  from PunchClock

错误消息:关键字“where”附近的语法不正确。

我想您需要一个
大小写表达式。另外,由于给定行的
InOut
值为
0
1
,但不是两者都有,因此我认为需要进行聚合

所以,我猜:

select PunchMonth, PunchDay, PunchYear,
       datediff(second, min(case when InOut = 0 then punchdatetime end),
                max(case when InOut = 1 then punchdatetime  end)
               ) as seconds_diff
from PunchClock
group by PunchMonth, PunchDay, PunchYear;
可能是您需要的案例(不是在哪里)


看起来您有一个表,其中有一条打孔记录和一条打孔记录。这需要的不仅仅是来自单个表的简单查询。样本数据和结果肯定会有帮助。非常感谢
select PunchMonth
  , PunchDay
  , PunchYear
  , case INOut = 0 then PunchDateTime else -PunchDateTime end
from PunchClock