Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Sql 基于此选择更新-如何?_Sql_Sql Server_Database - Fatal编程技术网

Sql 基于此选择更新-如何?

Sql 基于此选择更新-如何?,sql,sql-server,database,Sql,Sql Server,Database,我一直在做考勤申请,需要一些启发。 这是我当前的SQL查询: 每一个小时直到下午0点:我知道这不是一个好的解决方案。 如果员工在19小时(公司计划为18小时)离开,此更新会将原始注销时间更改为-1小时。 我想做的是简化和自动化流程。 这带来了我之前的问题。。。如何基于该select语句进行更新? 或换句话说,类似于: 注意:此IdMarcacao是行的唯一标识符。 谢谢大家! 我相信这里已经提到了这一点:不可能那么简单:|这是我的一天,哈哈。让我试试。没关系,我尝试了一个简单的解决方法。我创建了

我一直在做考勤申请,需要一些启发。 这是我当前的SQL查询:

每一个小时直到下午0点:我知道这不是一个好的解决方案。 如果员工在19小时(公司计划为18小时)离开,此更新会将原始注销时间更改为-1小时。 我想做的是简化和自动化流程。 这带来了我之前的问题。。。如何基于该select语句进行更新? 或换句话说,类似于:

注意:此IdMarcacao是行的唯一标识符。
谢谢大家!

我相信这里已经提到了这一点:不可能那么简单:|这是我的一天,哈哈。让我试试。没关系,我尝试了一个简单的解决方法。我创建了一个视图,现在正试图在UPDATE语句中使用这些值:|我必须RTFM关于MSSQL视图。谢谢,我还有一个问题。。。我不能多次运行此功能,否则会影响注销时间。我必须将Resultados上的额外设置为零。这将是我的家庭作业,哈哈。谢谢。在我的头顶上,你需要使用一个临时表,使用select into,它将有M.id、R.id、M.FieldToUpdateNewValue、R.FieldToUpdateNewValue,然后是两个insert语句,将临时表连接到表上进行更新。这应该让你开始…这对我的卡车来说是一个很大的负担。我使用update table set Extra=0,其中Extra 0:ehh谢谢。唯一的危险是,如果在Marcacoes表更新和结果更新之间插入了一条新记录,那么您将拥有一条无效记录。
 SELECT M.IdMarcacao, M.IdFuncionario, M.Data, M.Hora, Extra, 
    (M.Hora-(convert(varchar(11),dateadd(ms,cast(Extra*3600000 as bigint),'12/30/1899'),108))) as teste 
 FROM TimeReport.dbo.Marcacoes M 
      INNER JOIN TimeReport.dbo.Resultados R ON M.IdFuncionario = R.IdFuncionario
                                                AND M.Data = R.Data 
 WHERE (R.Extra <> 0 AND M.[Tipo Marcacao] = 'SAI') 
       AND M.Hora=(SELECT max(hora) 
                   FROM timereport.dbo.marcacoes 
                   WHERE data = M.Data)
UPDATE [TimeReport].[dbo].[Marcacoes]
SET [Hora] = [Hora] - convert(datetime,'01:00:00',108)
WHERE [Hora] > '1899-12-30 19:00:00.000'
UPDATE TimeReport.dbo.Marcacoes
SET Hora = (The value from the statement above, field "teste")
WHERE IdMarcacao = IdMarcacao(from the statement above)
update TimeReport.dbo.Marcacoes set
  Hora = (M.Hora-(convert(varchar(11),dateadd(ms,cast(Extra*3600000 as bigint),'12/30/1899'),108)))
--select M.IdMarcacao, M.IdFuncionario, M.Data, M.Hora, Extra, (M.Hora-(convert(varchar(11),dateadd(ms,cast(Extra*3600000 as bigint),'12/30/1899'),108))) teste
from TimeReport.dbo.Marcacoes M 
INNER JOIN TimeReport.dbo.Resultados R ON M.IdFuncionario = R.IdFuncionario AND M.Data = R.Data 
WHERE (R.Extra <> 0 AND M.[Tipo Marcacao] = 'SAI') 
AND M.Hora=(select max(hora) from timereport.dbo.marcacoes where data = M.Data)