Найти Последовательности, Отсутствующие

#sql

#sql

Вопрос:

Объявить @таблице EMPTABLE ( идентификатор [инт] идентичность(1,1) не null, EMPCODE тип varchar(200)) вставить в @EMPTABLE выберите EmployeeCode от Tbl_Emp_TimeRegister с(подсказку nolock) внутреннее соединение Tbl_Emp_Details ЭД с(подсказку nolock) на авт.Кодсотрудника=а.Кодсотрудника
где.StatusId = (62) и Active = 1 и для, Между 2021-11-01 » и » 2021-11-30 группы по EmployeeCode ,StatusId, имеющих считать (.StatusId) gt; 5, если объект object_id(‘базы данных tempdb..#разработана’) НЕ ЯВЛЯЕТСЯ НУЛЕВОЙ ТАБЛИЦЕЙ ОТБРАСЫВАНИЯ #ИТОГОВЫЙ СЧЕТ СОЗДАЙТЕ ТАБЛИЦУ #ИТОГОВЫЙ СЧЕТ ([Итоговый счет] INT,EMPCode varchar(200))

 DECLARE @Counter INT ,@EmPCode varchar(200) SET @Counter=1  

ОБЪЯВИТЕ КУРСОР emp_cursor ДЛЯ ВЫБЕРИТЕ EMPCODE ИЗ @EMPTABLE

ОТКРОЙТЕ emp_cursor

 FETCH NEXT FROM emp_cursor INTO @EmPCode  --print 'Employee_Code '  @EmPCode  WHILE @@FETCH_STATUS = 0 BEGIN  IF OBJECT_ID('tempdb..#T') IS NOT NULL  DROP TABLE #T   CREATE TABLE #T ( MyDate DATE,EmployeeCode varchar(200),StatusId INT) ;   insert into #T   select format(Forday, 'yyyy-MM-dd') as date,EmployeeCode,a.StatusId   from Tbl_Emp_TimeRegister a with(nolock)  INNER JOIN Tbl_Emp_Details ED with(nolock) on ED.EmployeeId=a.EmployeeId   where a.StatusId IN(62,71,69)  And Active =1  AND EmployeeCode=@EmPCode  and Forday between '2021-11-01' and '2021-11-30'   DECLARE @chkCount int=0,@maxDate date=null,@minDate date=null  DECLARE @LOCAL_TABLEVARIABLE TABLE  ( Id [int] IDENTITY(1,1) NOT NULL,  RW INT,  FromDate DATE,  EMPCODE VARCHAR(100)  )  INSERT INTO @LOCAL_TABLEVARIABLE   SELECT RW=ROW_NUMBER() OVER( PARTITION BY GRP ORDER BY MyDate) ,MyDate,EmployeeCode  FROM  (  SELECT MyDate, DATEDIFF(Day, '1900-01-01' , MyDate)- ROW_NUMBER() OVER( ORDER BY MyDate ) AS GRP,EmployeeCode  FROM #T  ) A  select top 1 @chkCount = RW-1,@maxDate = FromDate   from @LOCAL_TABLEVARIABLE   where EMPCODE=@EmPCode   order by rw desc   --print @chkCount print @maxDate print @EmPCode   IF @chkCount gt;= 5  BEGIN  select @minDate = DATEADD(DAY, -@chkCount, @maxDate)  --print @minDate   ;WITH CTE1 (Date) AS(  SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate)   1)  Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)  FROM sys.all_objects a  CROSS JOIN sys.all_objects b  )   INSERT INTO #TotalCount   select COUNT(*),@EmPCode from CTE1 where Date not in(    select format(Forday, 'yyyy-MM-dd') AS Date from Tbl_Emp_TimeRegister a with(nolock)  INNER JOIN Tbl_Emp_Details ED with(nolock) on ED.EmployeeId=a.EmployeeId  where a.StatusId IN(71,69)  AND EmployeeCode=@EmPCode  and Forday between '2021-11-01' and '2021-11-30'  )  END   FETCH NEXT FROM emp_cursor INTO @EmPCode  END  

ЗАКРЫТЬ emp_cursor; ОСВОБОДИТЬ emp_cursor;

выберите * из #Итоговый счет

Комментарии:

1. Добро пожаловать на SO ! В чем заключается ваш вопрос ? В чем ваша проблема ?