안녕하세요.
다음과 같은 문제를 쿼리로 해결하려고 했는 데 잘 안 되어서 질문드립니다.
조건은 다음과 같습니다.
1. 데이터는 A, B, C가 있다
2, 가능한 한 B와 C는 연달아 올 수가 없다.
3, 기존 정렬을 최소한으로 무시해라.
예를 들어
1) 첫번째 경우
1. A 1.A
2. B 2. B
3. C => 4. A
4. A 3. C
5. A 5. A
2) 두번째 경우(어떠한 경우에도 연달아 오는 방법뿐이라0
1. B 1. B
2. C 2. C
3. B => 3. B
4. C 4. C
이걸 쿼리로 작성 할려고 합니다.
가능할까요?
--답에만 맞췄어요.. WITH T AS ( SELECT 1 SEQ , 'A' VAL FROM DUAL UNION ALL SELECT 2 SEQ , 'B' VAL FROM DUAL UNION ALL SELECT 3 SEQ , 'C' VAL FROM DUAL UNION ALL SELECT 4 SEQ , 'A' VAL FROM DUAL UNION ALL SELECT 5 SEQ , 'A' VAL FROM DUAL UNION ALL SELECT 6 SEQ , 'B' VAL FROM DUAL UNION ALL SELECT 7 SEQ , 'C' VAL FROM DUAL UNION ALL SELECT 8 SEQ , 'B' VAL FROM DUAL UNION ALL SELECT 9 SEQ , 'C' VAL FROM DUAL ) SELECT * FROM (SELECT T.SEQ , T.VAL ,CASE WHEN VAL= 'C' AND LAG(VAL) OVER(ORDER BY SEQ) = 'B' THEN SEQ + 1 ELSE SEQ END TMP_SEQ FROM T ) ORDER BY 3 , VAL