database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40881 게시물 읽기
No. 40881
그룹핑 문제 입니다. 도와주시면 감사하겠습니다.
작성자
(초보초보)
작성일
2015-07-28 16:00
조회수
7,764

WITH TEMP AS (

SELECT 1 NUM, 'AAA' P_CTG_CODE, 'AAA-111' CTG_DESC FROM DUAL

UNION ALL SELECT 2, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 3, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 4, 'BBB', 'BBB-111' FROM DUAL

UNION ALL SELECT 5, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 6, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 7, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 8, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 9, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 10, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 11, 'BBB', 'BBB-111' FROM DUAL

UNION ALL SELECT 12, 'BBB', 'BBB-111' FROM DUAL

)

SELECT

A.*

FROM TEMP A

 

다음과 같은 데이터에서 아래와 같은 결과를 가져오고 싶습니다.

도와주시면 감사하겠습니다.

 

NUM P_CTG_CODE CTG_DESC 그룹핑 기대값

1 AAA AAA-111===================>1

2 AAA AAA-111===================>1

3 AAA AAA-111===================>1

4 BBB BBB-111===================>2

5 CCC CCC-111===================>3

6 CCC CCC-111===================>3

7 AAA AAA-111===================>4

8 AAA AAA-111===================>4

9 CCC CCC-111===================>5

10 CCC CCC-111===================>5

11 BBB BBB-111===================>6

12 BBB BBB-111===================>6

 

이 글에 대한 댓글이 총 2건 있습니다.

자문 자답 입니다. ^^

 

WITH TEMP1 AS (

SELECT 1 NUM, 'AAA' P_CTG_CODE, 'AAA-111' CTG_DESC FROM DUAL

UNION ALL SELECT 2, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 3, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 4, 'BBB', 'BBB-111' FROM DUAL

UNION ALL SELECT 5, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 6, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 7, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 8, 'AAA', 'AAA-111' FROM DUAL

UNION ALL SELECT 9, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 10, 'CCC', 'CCC-111' FROM DUAL

UNION ALL SELECT 11, 'BBB', 'BBB-111' FROM DUAL

UNION ALL SELECT 12, 'BBB', 'BBB-111' FROM DUAL

),

TEMP2 AS (

SELECT

(

CASE

WHEN NUM = 1 OR CTG_DESC != (LAG(CTG_DESC, 1, NULL) OVER(ORDER BY NUM)) THEN

1

ELSE

NULL

END

) CNUM,

A.*

FROM TEMP1 A

),

TEMP3 AS (

SELECT

COUNT(DECODE(CNUM, 1, 1)) OVER(ORDER BY NUM) GRP,

A.*

FROM TEMP2 A

)

SELECT

COUNT(*) OVER(PARTITION BY GRP) CNT,

A.*

FROM TEMP3 A

초보초보님이 2015-07-28 16:56에 작성한 댓글입니다. Edit

SELECT num, p_ctg_code, ctg_desc
     , grp
     , COUNT(*) OVER(PARTITION BY grp) cnt
  FROM (SELECT num, p_ctg_code, ctg_desc
             , COUNT(flag) OVER(ORDER BY num) grp
          FROM (SELECT num, p_ctg_code, ctg_desc
                     , DECODE( p_ctg_code
                             , LAG(p_ctg_code) OVER(ORDER BY num)
                             , NULL, 1) flag
                  FROM temp
                )
        )
;

 

마농(manon94)님이 2015-07-29 10:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40884PL/SQL에서 TABLE명을 변수로 받아서 CURSOR 실행법..? [3]
초보자
2015-07-30
7939
40883특정 문자를 제거 후 (하이픈) 데이타 출력 방법 좀 알려 주세요. [2]
밥님
2015-07-29
7774
40882오라클 특수문자 깨짐 [1]
shrek
2015-07-28
23159
40881그룹핑 문제 입니다. 도와주시면 감사하겠습니다. [2]
2015-07-28
7764
40880sql 문의 드립니다. [1]
쌩초보
2015-07-28
7270
40879sql 문의 입니다. [2]
이현정
2015-07-28
7297
40878쿼리를 어떻게 해야 하는지 여쭤봅니다. [2]
초보초보
2015-07-27
7195
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다