커서가 현재 형식에서 다음과 같은 원하는 출력을 얻지 못하게하려고합니다. 현재 커서를 사용해야하고 데이터 세트가 매우 커서 실행하기 위해 약 2 시간이 걸립니다. 커서를 여기SQL 서버에서 커서 피하기
Declare @CustomerId CHAR(8)
Declare @StartDate DateTime
Declare @PlStartDate DateTime
Declare @ProviderNo CHAR(8)
Declare @Code CHAR(3)
Declare @PreviousCustomerId CHAR(8)
Declare @PreviousStartDate DateTime
Declare @PreviousRealStartDate DateTime
Declare @PreviousProviderNo CHAR(8)
Declare @PreviousCode CHAR(3)
Declare @RowNumber smallint
Declare @providers CURSOR
SET @providers = CURSOR FAST_FORWARD FOR
Select CustomerId, StartDate, PlStartDate, ProviderNo, Code, ProviderSSN, RowNumber
From dbo.[provider] ORDER by CustomerId, StartDate
OPEN @providers
FETCH NEXT From @providers INTO @CustomerId, @StartDate, @PlStartDate,@ProviderNo, @Code, @ProviderSSN, @RowNumber
WHILE @@FETCH_STATUS = 0
BEGIN
If @RowNumber <>1 AND @CustomerId = @PreviousCustomerId AND @Code = @PreviousCode AND (@ProviderNo = @PreviousProviderNo)
BEGIN
Update dbo.provider
SET StartDate = @PreviousRealStartDate
Where CustomerId = @CustomerId AND StartDate = @StartDate;
END
ELSE
BEGIN
Set @StartDate = @StartDate;
Update dbo.provider
Set StartDate = @StartDate
Where CustomerId = @CustomerId AND StartDate = @StartDate
END
Set @PreviousCustomerId = @CustomerId
Set @PreviousCode = @Code
Set @PreviousProviderNo = @ProviderNo
if @StartDate IS NOT NULL
Set @PreviousRealStartDate = @StartDate
Set @PreviousStartDate = @StartDate
FETCH NEXT From @providers INTO @CustomerId, @StartDate, @PlStartDate,@ProviderNo, @Code, @RowNumber
END
CLOSE @providers
DEALLOCATE @providers
현재 형식 내 현재 코드
Cust ID Start Date End Date Code Provider 7063903 2/11/2009 2/17/2009 DEF 485960 7063903 2/17/2009 2/24/2009 DEF 485960 7063903 2/24/2009 4/6/2009 LHF 479407 7063903 4/6/2009 9/11/2009 DEF 487398 7063903 8/31/2010 9/1/2010 DEF 487398 7063903 8/28/2011 11/25/2011 ABC 531428 7063903 3/1/2012 6/25/2012 DEF 487398 7063903 6/25/2012 3/22/2013 DEF 487398 7063903 3/22/2013 4/23/2014 DEF 487398 7063903 4/23/2014 5/1/2014 DEF 487398 7063903 5/1/2014 7/1/2015 DEF 487398 7063903 7/1/2015 8/28/2015 DEF 531428 7063903 8/28/2015 11/25/2015 ABC 531428 7063903 11/25/2015 9/21/2016 ABC 531428 Desired Output CustID Start Date End Date Code Provider 7063903 2/11/2009 2/24/2009 DEF 485960 7063903 2/24/2009 4/6/2009 LHF 479407 7063903 4/6/2009 9/1/2010 DEF 487398 7063903 8/28/2011 11/25/2011 ABC 531428 7063903 4/6/2009 7/1/2015 DEF 487398 7063903 7/1/2015 8/28/2015 DEF 531428 7063903 8/28/2015 9/21/2016 ABC 531428
브라이언
감사합니다, 당신은 우리의 데이터는 제안 된 솔루션을 테스트하는 것을 사용할 수있을 것입니다, 텍스트로 데이터의 그 샘플을 제공합니다. 미래의 텍스트 테이블 사용. –
@Used_By_ 이미 텍스트 테이블에 데이터를 추가했습니다. – CoolArsh