2009-11-12 2 views
0

나는SQL Server 2005에서 범위 사이의 값을 확인하십시오 (BASED APPROACH 설정)?

Id Value 
1 Start 
2 Normal 
3 End 
4 Normal 
5 Start 
6 Normal 
7 Normal 
8 End 
9 Normal 

같은 테이블 내가 즉 시작 & 끝 사이의 기록

id Value 
1 Start 
2 Normal 
3 End 

5 Start 
6 Normal 
7 Normal 
8 End 

같은 출력을 가지고해야합니다. ID가 4 & 인 레코드는 시작 외부에 있습니다. & 이제는 출력에 없습니다.

집합 기반 방식 (SQLServer2005)에서이를 수행하는 방법은 무엇입니까?

답변

4

로드 테이블 @t :

declare @t table(Id int,Value nvarchar(100)); 
insert into @t values (1,'Start'),(2,'Normal'),(3,'End'),(4,'Normal'),(5,'Start'),(6,'Normal'),(7,'Normal'),(8,'End'),(9,'Normal'); 

검색어 : 내가 중복이없는 경우를 가정하지있어

With RangesT as (
    select Id, (select top 1 Id from @t where Id>p.Id and Value='End' order by Id asc) Id_to 
    from @t p 
    where Value='Start' 
) 
select crossT.* 
from RangesT p 
cross apply (
    select * from @t where Id>=p.Id and Id<=Id_to 
) crossT 
order by Id 

참고. 결과 :

Id   Value 
----------- ------ 
1   Start 
2   Normal 
3   End 
5   Start 
6   Normal 
7   Normal 
8   End 
관련 문제