通过ROC_UserLoginInfo表查询到的如图的信息去循环添加
获取到如下图的数据
USE [ShopFlow]
GO
/****** Object: StoredProcedure [dbo].[SFROC_UserLogininfoinfo] Script Date: 2023-3-29 14:27:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[SFROC_UserLogininfoinfo](@DateFrom datetime,@DateTo datetime)
as
declare @Bomname nvarchar(50)
declare @DateFrom1 nvarchar(50)
declare @DateTo1 nvarchar(50)
declare @DateF nvarchar(50)
declare @DateT nvarchar(50)
select @DateFrom1=@DateFrom+'00:00:00.000'
select @DateTo1=@DateTo+'23:59:59.000'
select @DateF = convert(char(10),@DateFrom1,121)
select @DateT = convert(char(10),@DateTo1 ,121)
declare @aa nvarchar(4000)
declare @aa1 nvarchar(4000)
Create Table #aa
(
ID int,
CrtUser nvarchar(50),
CrtDate datetime,
UserName nvarchar(50),
LoginDate datetime,
LogoutDate datetime,
jobNo nvarchar(50),
ProcessID nvarchar(50),
MachineID nvarchar(50),
WoQty int,
Rtype nvarchar(50),
Remarks nvarchar(1000),
UpdUser nvarchar(50),
UpdDate datetime
)
Create Table #tt
(
ID int,
JobNo nvarchar(50),
ItemCode nvarchar(50),
ProcessID nvarchar(50),
MachineID nvarchar(50),
TotalUsers int,
LoginDate datetime,
LogoutDate datetime,
MinutesSpend int,
Qty int,
num1 nvarchar(50),
num2 nvarchar(50)
)
--获取当天的所有已经登出的信息
select @aa='Insert into #aa select * from ROC_UserLogininfo where LogoutDate between '''+@DateF+''' and '''+@DateT+''' order by LogoutDate '
exec(@aa)
declare @numm int
declare @mprmun nvarchar(50)
declare @timenum nvarchar(50)
declare @qtynum nvarchar(50)
declare @mmnum1 int
declare @mmnum2 int
declare @mmnum3 nvarchar(50)
declare @mmnum4 int
declare @mmnum5 nvarchar(50)
declare @JOBNO nvarchar(50),@MachineID nvarchar(50),@Logintime datetime,@Logouttime datetime,@ProcessID nvarchar(50)
declare temp_aa cursor for select @JOBNO,@MachineID,@Logintime,@Logouttime,@ProcessID from #aa
open temp_aa
fetch next from temp_aa into @JOBNO,@MachineID,@Logintime,@Logouttime,@ProcessID
while @@fetch_status<>-1
begin
--获取Bom名称
select @Bomname=BOMNO from SFBSJOBProcedure where JobNo=@JOBNO
if(@Bomname<>'')
begin
--获取当前时间段该机种的工作人数
select @mprmun=count(*) from ROC_UserLoginInfo where Rtype=0 and MachineID=@MachineID and Jobno=@JOBNO
if(@mprmun<>'')
begin
--获取总工作时间
select distinct @timenum=datediff(minute, @Logintime,@Logouttime)
if(@timenum<>'')
begin
--获取时间段内该机种人员的完成数量
select @qtynum=SUM(QTY) from SFDetails(NOLOCK) where JOBNO=@JOBNO AND ProcessID=@ProcessID AND MachineName=@MachineID and CrtDate between @Logintime and @Logouttime
if(@qtynum<>'')
begin
--计算Qty/Minute
select @mmnum1=cast(@timenum as int)
select @mmnum2=cast(@qtynum as int)
select @mmnum3=CONVERT(FLOAT,@mmnum2) / CONVERT(FLOAT,@mmnum1)
if(@mmnum3<>'')
begin
--计算Qty/Min/Person
select @mmnum4=cast(@mmnum3 as int)
select @mmnum5=CONVERT(FLOAT,@mmnum2) / CONVERT(FLOAT, @mmnum1) / CONVERT(FLOAT,@mmnum4)
if(@mmnum5<>'')
begin
select @numm=COUNT(*) from ROC_UserLoginInfo1 where LoginDate=@Logintime and LogoutDate=@Logouttime and JobNo=@JOBNO
if(@numm<=0)
begin
insert into ROC_UserLoginInfo1 (JobNo,ItemCode,ProcessID,MachineID,TotalUsers,LoginDate,LogoutDate,MinutesSpend,Qty,num1,num2)
values(@JOBNO,@Bomname,@ProcessID,@MachineID,@mprmun,@Logintime,@Logouttime,@timenum,@qtynum,@mmnum3,@mmnum5)
fetch next from temp_aa into @JOBNO,@MachineID,@Logintime,@Logouttime,@ProcessID
end
end
end
end
end
end
end
end
close temp_aa
deallocate temp_aa
select * from ROC_UserLoginInfo1 where LogoutDate between @DateF and @DateT order by LogoutDate
SQL看起来太复杂,请介绍下你的需求,或许有其它简单的解决方案。
。。。。。。。。。。。。。这么多层 if ?不明白你要干什么了
说需求,贴代码内容的数据用例,放期待结果,说明你想用游标干什么