我有一张表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 :(得分:0)
我对您的要求的解释
您希望合并attendance
表格中的行,以便每个(empcode, date)
组合最终只有一行。
对于每个此类行,如果InTime
组合存在多个InTime
列,则您希望使用最早的(empcode, date)
值填充新的OutTime
列。
同样,如果OutTime
组合存在多个(empcode, date)
值,您希望新的varchar
列填充最新datetime
值。
一些额外的说明
我注意到您为所有列使用int
数据类型。那真不幸。如果可能,您确实应该使用适当的类型(varchar
,attendance
等)。但我会忽略这一点,并假设您保留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 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
源表。但是您的SP代码表明您的源数据来自2个表之间的连接。由于您没有详细描述,我将坚持您对单个源表的描述。您可以根据需要进行调整。
<强>设置强>
(function( $ ){
var navOffset = jQuery("nav").offset().top;
jQuery(window).scroll(function() {
var scrollPos = jQuery(window).scrollTop();
if (scrollPos >= navOffset) {
jQuery("nav").addClass("fixed");
} else {
jQuery("nav").removeClass("fixed");
}
});
})(jQuery);
INSERT语句
您不需要所有复杂的游标代码。插入可以使用条件聚合在单个语句中完成:
.fixed