동일한 그룹의 데이터를 축소 할 필요가 있습니다.SQL 서버 데이터를 decollapse하는 방법
예를 들어 설명하겠습니다.
데모 데이터 :
+-------------+----+------------+-----------+
| Primarykey | ID | START_Point| STOP_Point|
+-------------+----+------------+-----------+
| 1 | 1 | 1 | 10 |
| 2 | 1 | 2 | 4 |
| 3 | 1 | 5 | 5 |
| 4 | 1 | 5 | 5 |
| 5 | 1 | 5 | 15 |
| 6 | 2 | 5 | 5 |
| 7 | 2 | 2 | 2 |
| 8 | 2 | 1 | 10 |
| 9 | 2 | 1 | 20 |
+-------------+----+------------+-----------+
데이터는 그룹으로 decollapse되어야
:
예상 출력 :
+------------+-----------+------------+-----------+
| primarykey | SubjectID | START_Point| STOP_Point|
+------------+-----------+------------+-----------+
| 1 | 1 | 1 | 1 |
| 1 | 1 | 2 | 4 |
| 1 | 1 | 5 | 5 |
| 1 | 1 | 6 | 10 |
| 2 | 1 | 2 | 4 |
| 3 | 1 | 5 | 5 |
| 4 | 1 | 5 | 5 |
| 5 | 1 | 5 | 5 |
| 5 | 1 | 6 | 10 |
| 5 | 1 | 11 | 15 |
| 6 | 2 | 5 | 5 |
| 7 | 2 | 2 | 2 |
| 8 | 2 | 1 | 1 |
| 8 | 2 | 2 | 2 |
| 8 | 2 | 3 | 4 |
| 8 | 2 | 5 | 5 |
| 8 | 2 | 6 | 10 |
| 9 | 2 | 1 | 1 |
| 9 | 2 | 2 | 2 |
| 9 | 2 | 3 | 4 |
| 9 | 2 | 5 | 5 |
| 9 | 2 | 6 | 10 |
| 9 | 2 | 11 | 20 |
+------------+-----------+------------+-----------+
로직 : 어떤 Start_Point가 없어야 - Stop_Point 범위를 오버랩 같은 그룹 내에서.
설명 : 우리는 = 1 start_point하고 Stop_point 지금 = 10
우리가 다른 행을 선택하면
"ID"기본 키 = 1의 경우
에
그룹으로, ID = 1 (그룹 별 ID이므로) 기본 키 2,3,4 및 5가 1 - 10 범위 내에서 중복됩니다.
그래서 w e는 decolapse 1-10에서 1-1,2-4,5-5,6-10으로 축소하려고합니다.
각 행에 대해 동일한 로직을 적용해야합니다.
대용량 데이터에 내 쿼리가 적용되고 처리 속도가 느려지므로 행 가져 오기 및 처리 논리별로 커서 나 행을 사용하고 싶지 않습니다.
아무 것도 설명하지 않거나 혼란스러운 것으로 보이는 경우 알려주십시오.
약간의 도전이지만 스택 오버플로에 대해 많은 전문가가 있다는 것을 알고 있습니다.
약간의 해결책을 찾고 있습니다.
미리 감사드립니다. - 원래 테이블에 포함 된 모든 ID의 각 시간 범위에 대한 엔드 포인트
SELECT ID, Idx, StartStop,
LEAD(Idx) OVER (PARTITION BY ID ORDER BY IdxRowNum) AS NextIdx,
LEAD(StartStop) OVER (PARTITION BY ID ORDER BY IdxRowNum) AS NextStartStop
FROM (
SELECT ID, Idx, StartStop, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Idx, StartStop) AS IdxRowNum
FROM
(SELECT ID, START_Point, STOP_Point
FROM @T) Src
UNPIVOT (
Idx FOR StartStop IN (START_Point, STOP_Point)
) AS Unpvt
) t
는 시작의 테이블을 만들기 : 당신이 다음 쿼리를 사용할 수있는 시작점으로
그래서 우리는 decollapse 1-10을 1-1,2-4,5-5,6-10으로 축소하려고합니다. –
'primarykey = 5'는'start_point'와'stop_point'를 5-15로 보여줍니다. '6-10'은 어떻게 될까요? 'id = 2'에서 어떻게 작동할까요? –
우리는 당신이 해결책을 찾도록 도울 수 있습니다. 하지만 먼저 질문에 대한 세부 정보를 제공해야합니다. 데이터를 어떻게 든 확장하려고하지만 비즈니스 규칙이 무엇인지 이해하지 못합니다. 당신이 올린 글에서 그것은 나에게 의미가 없습니다. 그리고 "decollapse"는 단어가 아닙니다, 나는 당신이 확장을 의미한다고 생각합니다. –