2012-01-11 10 views
0


私は勤怠管理のアプリケーションで作業していて、いくつかの啓蒙が必要です。人は残業時間を作った -
1:これは、行を返す
このSELECTに基づくUPDATE - How to?

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) 


これが私の現在のSQLクエリです。
2 - 最後のログアウト時刻
3 - 超過時間の合計。
4 - ログアウト時間と残業=予定時刻の差
5 - 私は本当に必要なものを、アプリケーション自体、についてはあまり詳細に入ることなく、それはログアウト時間(ティポ= SAI)
だことを確認してくださいすることにこれを有効にすることですUPDATEステートメント。
は、私がこれを行うために使用:0pmまで一つ一つの時間

UPDATE [TimeReport].[dbo].[Marcacoes] 
SET [Hora] = [Hora] - convert(datetime,'01:00:00',108) 
WHERE [Hora] > '1899-12-30 19:00:00.000' 

を:(それは私が知っている良い解決策ではありません
このアップデートは、マイナス1時間、作業者がいる場合に、元のログアウト時間を変更します。
私がやろうとしているのは、プロセスを単純化し、自動化することです。
これは私の以前の質問です...その選択文に基づいてどのように更新できますか?
...つまり、何かのように:

UPDATE TimeReport.dbo.Marcacoes 
SET Hora = (The value from the statement above, field "teste") 
WHERE IdMarcacao = IdMarcacao(from the statement above) 

注:この「IdMarcacao」は、行の一意の識別子です。
ありがとうございます!私は、これはここで扱われたと信じて

+2

は:http://stackoverflow.com/q/2334712/535275 –

+0

は、単純なことをすることはできません。|これは私の日、笑を作る。私は試してみましょう。 –

+0

Nop。うまくいきませんでした。 –

答えて

2
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) 
+0

これは私をノックアウト:)それは働いている!私はすでに「意見」と「宣言」をめちゃくちゃにしていました。ありがとう –

+0

今私は別の問題があります...私はこれを複数回実行することはできません、またはそれはログアウト時間を混乱させます。私は "Resultados"の "Extra"をゼロにする必要があります。これは私の宿題、笑になります。ありがとう。 –

+0

私の頭の上から、あなたはM.id、R.Id、M.FieldToUpdateNewValue、R.FieldToUpdateNewValueの後ろに2つのinsertステートメントが入る(select intoを使って)テンポラリテーブルを使う必要がありますテーブルにtempテーブルを更新します。それはあなたを始めなければなりません... –

関連する問題