Вставить выбранные данные из нескольких таблиц в одну таблицу - PullRequest
0 голосов
/ 25 августа 2011

У меня есть следующая структура таблицы в SQL Server 2005.

  1. AttendanceDetail (AttenID, Date, EmpID,....)
  2. A_OfficialDetail (AttenID, OfficeOut, OfficeIn)
  3. A_Personal Detail (AttenID, OfficeOut, OfficeIn)
  4. A_RecessDetail (AttenID, OfficeOut, OfficeIn)
  5. 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

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Похоже, это действительно просто на самом деле ....

INSERT INTO Atten_Temp_AttenDetail 
SELECT 
a.EmpID, 
a.AttenID,
'', -- You have no fields for this in the database, may be in AttendanceDetail
b.OfficeOut, -- With the next two, not sure if you want to use A_OfficialDetail or A_Personal Detail
c.OfficeIn
FROM AttendanceDetail a
INNER JOIN A_OfficialDetail b ON a.AttenID = b.AttenID
INNER JOIN [A_Personal Detail] c ON a.AttenID = c.AttenID
INNER JOIN A_RecessDetail d on a.AttenID = d.AttenID
WHERE a.EmpID = 100

Это то, что вы ищете?

0 голосов
/ 25 августа 2011

Я бы начал с создания запроса, возможно, с помощью объединений, который дает мне результат, который должен быть сохранен.

Тогда это будет просто своего рода выбор в, чтобы сохранить данныев Atten_Temp_AttenDetail.

Каким должен быть SQL и соединение, зависит от того, как отношения между вашими таблицами

Обновление: если таблица 2,3,4 более или менее идентична, то как насчетс помощью UNION?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...