MadMyche
Общий формат выполнения обновления на основе соединения аналогичен выполнению выбора; я использовал этот формат как с внутренними, так и с внешними соединениями.
UPDATE d
SET d.DestValue1 = s.SourceValue1
FROM DestinationTable d
JOIN SourceTable s ON d.TableIndex = s.TableIndex
Это будет до вас, чтобы получить ваши сопоставления таблиц прямо
Обновление
Как
Maciej Los
как указано в другом ответе, у вас действительно есть некоторые проблемы с вашим синтаксисом, о которых следует позаботиться
CASE
WHEN EmployeesAttendance.Hours >= 8 THEN 1
WHEN EmployeesAttendance.Hours = 0 THEN 0
WHEN EmployeesAttendance.Hours >= 6 THEN 0.5 Day, -- error here
CASE
WHEN EmployeesAttendance.Hours > EmployeeDetails.Dhour then EmployeesAttendance .Hours - EmployeesAttendance .Dhour
else 0
End as OT,
Здесь нет
END
к первому утверждению.
Результаты будут равны нулю между 0 и 6 часами.
Я также вообще рекомендую не использовать
Зарезервированные/Специальные Слова как имена столбцов; если они должны быть использованы, то они должны быть обернуты с помощью
[]
(например, дни, часы). Мое эмпирическое правило заключается в том, что если имя столбца или переменной меняет цвет в C# или TSQL, измените это имя.
Я выполнил следующие утверждения, и вы можете увидеть, как это работает с некоторыми реальными данными
declare @EmployeeAttendance table(id int identity(1,1), [hours] decimal(9,2) )
insert @EmployeeAttendance values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)
SELECT ID, [HOURS],
CASE
WHEN EmployeesAttendance.[Hours] >= 8 THEN 1
WHEN EmployeesAttendance.[Hours] = 0 THEN 0
WHEN EmployeesAttendance.[Hours] >= 6 THEN 0.5
END AS [Day]
FROM @EmployeeAttendance EmployeesAttendance
ORDER BY 1
Который вернул следующее
ID HOURS Day
1 0.00 0.0
2 1.00 NULL
3 2.00 NULL
4 3.00 NULL
5 4.00 NULL
6 5.00 NULL
7 6.00 0.5
8 7.00 0.5
9 8.00 1.0
10 9.00 1.0
11 10.00 1.0
Так что похоже у тебя еще есть кое какая работа
akhter86
MadMyche
я разработал SP,он просто обновляет INTTIME и OUTIME остальные значения столбцов не получают calculate....пожалуйста, просмотрите мой код
Обновление EmployeesAttendance
установите сотрудников на место.INTIME=@INTime,
Подчинение сотрудников.OUTTIME=@OUTTIME,
Подчинение сотрудников.Hours= ( (DATEDIFF(Hour,INTIME,OUTTIME))),
Подчинение сотрудников.День=( случай, когда сотрудники уходят.Часов >= 8, затем 1
Когда сотрудники приступают к работе.Часы = 0, затем 0
Когда сотрудники приступают к работе.Часов >= 6, затем 0,5 конца),
Подчинение сотрудников.OT=(случай, когда EmployeesAttendance.Часы работы > EmployeeDetails.Тогда дхур
Подчинение сотрудников.Часы Работы - EmployeeDetails.Дхур, иначе 0 конец),
Подчинение сотрудников.OTAmount =(случай, когда EmployeeDetails.OTEntitled = "Да"
И подчинение сотрудников .Часы работы >= EmployeeDetails.Дхур
Затем (( EmployeesAttendance.Часов - 8) * 100) еще 0 конец ),
Подчинение сотрудников.Time=( Convert(varchar(10),EmployeesAttendance.Интайм,108)),
Подчинение сотрудников.Поздно=(Случай, Когда Преобразования(Время, EmployeesAttendance .INTIME,108) > EmployeeDetails.LTime тогда 1 иначе 0
конец)
От EmployeeDetails
INNER Join EmployeesAttendance ON EmployeeDetails.Empid В = EmployeesAttendance.Empid в
-- Заказ по EmployeeDetails.Empid в АСК
там, где работают сотрудники.AttdID=@AttdID