Sql 基于此选择更新-如何?
我一直在做考勤申请,需要一些启发。 这是我当前的SQL查询: 每一个小时直到下午0点:我知道这不是一个好的解决方案。 如果员工在19小时(公司计划为18小时)离开,此更新会将原始注销时间更改为-1小时。 我想做的是简化和自动化流程。 这带来了我之前的问题。。。如何基于该select语句进行更新? 或换句话说,类似于: 注意:此IdMarcacao是行的唯一标识符。Sql 基于此选择更新-如何?,sql,sql-server,database,Sql,Sql Server,Database,我一直在做考勤申请,需要一些启发。 这是我当前的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)