2016-08-19 8 views
0

У меня есть одна таблица AttendanceLog.Вставить значения в таблицу из другой таблицы

Колонки:

  • EmpCode
  • Date
  • time
  • type

Это для посещаемости деталей пробивных

empcode date   time  type 
01  19.08.2016  080530 64 
01  19.08.2016  092030 64 
01  19.08.2016  084030 65 

Виды: 64 для Intime, 65 для outtime.

У меня есть другой стол.

Колонки

  • Empcode
  • Date
  • Intime
  • outtime

Теперь я хочу, чтобы вставить в эту таблицу из attendancelog таблицы. В зависимости от типа я должен вставить time в частности intime и outtime.

Просьба помочь для работника заполнить firstIntime и lastouttime

Моя процедура:

CREATE PROCEDURE [dbo].[Attendance] 
AS 
BEGIN 

SET NOCOUNT ON 

Declare @Empcode varchar(50), 
     @Date varchar(50), 
     @time varchar(10), 
     @type varchar(10) 

    Declare attcursor Cursor 
    for 
    select AC.AttEmpCode,AttDate,AttTime,AttType 
    from BGUsersAttendanceCode AC inner join BGAttendanceTempTable AT 
     on AC.AttEmpCode=AT.AttEmpCode 
     order by AttType,AttDate 

     open attcursor 

     fetch next from attcursor into 
     @Empcode, @Date, @time, @type 

     WHILE @@FETCH_STATUS = 0 
     begin 

     insert into BGUsersAttendanceLog values(@Empcode,@Date,@time,@time) 

     fetch next from attcursor into 
     @Empcode, @Date, @time, @type 

     end 

      CLOSE attcursor 
     DEALLOCATE attcursor 

END 
GO 
+0

Я создал хранимую процедуру – iswarya

+0

я Создал хранимую процедуру не использовать – iswarya

+0

Если вы хотите помочь, вы не должны просто указать вашу проблему и ждать для кого-то написать код для вас. Вы должны показать, что вы пробовали, объяснить, почему и как ваш код выходит из строя, тогда вы можете задать вопрос с разумной возможностью получить реальный полезный ответ. – Steve

ответ

0

Моя интерпретация ваших требований

  • Вы хотите объединить строки в вашем attendance, так что вы получите одну строку за каждые (empcode, date) сочетание.

  • Для каждой такой строки, вы хотите, чтобы новый InTime столбца заселяться с ранним InTime значения, если более чем один существует для этой (empcode, date) комбинации.

  • Кроме того, вы хотите, чтобы новый OutTime столбца заселяться с последними OutTime значений, если более чем один существует для этой (empcode, date) комбинации.

несколько дополнительных нот

  • Я заметил, что вы используете тип varchar данных для всех столбцов. Это неудачно. Если возможно, вы действительно должны использовать соответствующие типы (datetime, int и т. Д.). Но я проигнорирую это здесь и буду считать, что вы сохраняете значения varchar.

  • В вашем описании вы говорите, что у вас есть одна исходная таблица attendance. Но ваш код SP предполагает, что ваши исходные данные поступают из соединения между двумя таблицами. Поскольку вы не описали это подробно, я просто придерживаюсь описания одной исходной таблицы. Вы можете отрегулировать по мере необходимости.

Настройка

create table OldAttendanceLog (
    AttEmpCode varchar(50), 
    AttDate varchar(50), 
    AttTime varchar(10), 
    AttType varchar(10) 
) 

insert into OldAttendanceLog 
(AttEmpCode, AttDate, AttTime, AttType) 
values 
('01', '19.08.2016', '080530', '64'), 
('01', '19.08.2016', '092030', '64'), 
('01', '19.08.2016', '084030', '65'), 

create table NewAttendanceLog (
    AttEmpCode varchar(50), 
    AttDate varchar(50), 
    InTime varchar(10), 
    OutTime varchar(10) 
) 

INSERT заявление

Вам не нужно все, что сложный код курсора. Вставка может быть выполнена в одном операторе с помощью условной агрегации:

insert into NewAttendanceLog (AttEmpCode, AttDate, InTime, OutTime) 
select AttEmpCode, 
     AttDate, 
     min(case when AttType = '64' then AttTime end), 
     max(case when AttType = '65' then AttTime end) 
    from OldAttendanceLog 
group by AttEmpCode, AttDate 
+0

Спасибо за вашу ценную команду. Вы сэкономите свое время – iswarya

+0

Я выполнил задание .. Большое спасибо – iswarya

+0

еще одно осложнение в этом. Теперь в NewAttendanceLog необходимо добавить стол часов работы. Вам нужно каждый раз рассчитать и поместить в Рабочие часы столбец – iswarya

Смежные вопросы