У меня есть следующая структура таблицы в SQL Server 2005.
- AttendanceDetail (
AttenID, Date, EmpID,....
) - A_OfficialDetail (
AttenID, OfficeOut, OfficeIn
) - A_Personal Detail (
AttenID, OfficeOut, OfficeIn
) - A_RecessDetail (
AttenID, OfficeOut, OfficeIn
) - Atten_Temp_AttenDetail ** (
EmpID, AttenID, Detail, OfficeOut, OfficeIn
)
Мне нужен чистый код SQL для вставки данных в table 5
из table 1,2,3,4
так, что:
AttendanceDetail
имеет EmpID=100
, а Table 2,3,4
соответствует AttenID
из AttendanceDetail
, как для EmpID=100
.
Я попробовал это с курсором и циклом, но не смог получить то, что я хочу, он вставляет больше записей, чем я хотел.Помогите мне, пожалуйста.Заранее спасибо
OfficeOut и OfficeIn должны быть вставлены из 3 таблиц A_OfficialDetail, A_recessdetail и A_PersonalDetail в соответствии с AttenID в AttendanceDetail.Основная цель состоит в том, чтобы вставить данные официального входного, выходного и персонального входных данных в таблицу Atten_Temp_AttenDetail.Таблица должна выглядеть примерно так:
==================================
UserID AttenID Date Remark OfficeOut OficeIN
100 12 7/8/2011 Office 11:00 12:00
100 12 7/8/2011 Office 13:45 14:00
Код, который я пробовал:
Declare @AttenID bigint
Open cur
Fetch Next from cur into @AttenID
while @@fetch_status=0
begin
insert into Atten_Temp_AttenDetail(userID,AttenID,Date,OfficeOut,OfficeIn)
select @AttenID,A.workingDate,OfficeOut,OfficeIn from A_OfficialDetail as O,AttendanceDetail as A where O.AttenID=@AttenID and A.AttenID=@AttenID
insert into Atten_Temp_AttenDetail(userID,AttenID,Date,OfficeOut,OfficeIn)
select @AttenID,A.workingDate,OfficeOut,OfficeIn from A_PersonalDetail as O,AttendanceDetail as A where O.AttenID=@AttenID and A.AttenID=@AttenID
fetch next from cur into @AttenID
end
close cur
Deallocate cur