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 38937 게시물 읽기
No. 38937
댓글의 총 갯수
작성자
서유미(yumi764)
작성일
2011-10-05 10:55
조회수
5,900

한 테이블 안에서 답변형 게시판을 만들었습니다.

 즉, board_seq, parent_board_seq로 구분하여

    답변형이 아닐 때에는  board_seq, parent_board_seq에 똑같은  seq값이 들어가고

답변형 일 때에는  board_seq, parent_board_seq에 다른 값이 들어갑니다.

  즉,  board_seq  = 30 , parent_board_seq = 29 이렇게...

그런데 중요한건 리스트 가져올 때 각 게시물에  속한 답변 게시물의 총 개수를 가져오려고 했는데..

 아래 쿼리로 돌리면 가져오긴 합니다.

문제점은 삭제 된 글을 빼고 가져와야 하는데 모두 가져 옵니다.

 COUNT(*) OVER(PARTITION BY BBS.PARENT_SEQ ) AS CNT  이 구문에서 삭제 된 게시물은 빼고 가져오려면 어떻게 해야 하나요??

삭제는 del_yn = 'Y' 입니다.

 

 

SELECT PAGE ,
         BBS_NO,
         BOARD_SEQ,
         PARENT_SEQ,
         TITLE,
         CONTENTS,
         DOWN_CNT,
         EMAIL,
         EVENT_DAY ,
         EVENT_HOUR ,
         INP_NAME ,
         UPDT_NAME ,
         PWD ,
         READ_CNT ,
         VIDEO_URL ,
         PRODUCT_NM,
         PRODUCT_CODE,
         INP_DATE,
         UPDT_DATE,
         FILE_PATH,
         ORIGIN_FILE_NAME,
         TRANSFER_FILE_NAME ,
         FILE_TYPE,
         PHONE_NUM ,
         QUESTION_CODE ,
         RECIVE_YN,
         REPLY_CONTENTS,
         REPLY_YN,
         SMS_YN,
         FILE_PATH,
         TAG,
         CNT
    FROM
         (
         SELECT
                CEIL( ROWNUM / 10 ) AS PAGE ,
                RANK() OVER (ORDER BY ROWNUM  desc ) AS BBS_NO,
                A.BOARD_SEQ,
                A.PARENT_SEQ,
                A.TITLE,
                A.CONTENTS,
                A.DOWN_CNT,
                A.EMAIL,
                A.EVENT_DAY ,
                A.EVENT_HOUR ,
                A.INP_NAME ,
                A.UPDT_NAME ,
                A.PWD ,
                A.READ_CNT ,
                A.VIDEO_URL ,
                A.PRODUCT_NM,
                A.PRODUCT_CODE,
                A.INP_DATE,
                A.UPDT_DATE,
                A.FILE_PATH,
                A.ORIGIN_FILE_NAME,
                A.TRANSFER_FILE_NAME ,
                A.FILE_TYPE,
                A.PHONE_NUM ,
                A.QUESTION_CODE ,
                A.RECIVE_YN,
                A.REPLY_CONTENTS,
                A.REPLY_YN,
                A.SMS_YN,
                A.TAG,
                A.CNT
               
           FROM
                (
               
                SELECT
                       BBS.BOARD_SEQ,
                       BBS.PARENT_SEQ,
                       BBS.TITLE,
                       BBS.CONTENTS, 
                       BBS.DOWN_CNT,
                       BBS.EMAIL,
                       BBS.EVENT_DAY ,
                       BBS.EVENT_HOUR ,
                       BBS.INP_NAME ,
                       BBS.UPDT_NAME ,
                       BBS.PWD ,
                       BBS.READ_CNT ,
                       BBS.VIDEO_URL ,
                       BBS.PRODUCT_NM,
                       BBS.PRODUCT_CODE,
                       to_char(BBS.INP_DATE, 'yyyy.mm.dd') AS INP_DATE ,
                       to_char(BBS.UPDT_DATE, 'yyyy.mm.dd') AS UPDT_DATE ,
                       FF.FILE_PATH ,
                       FF.ORIGIN_FILE_NAME ,
                       FF.TRANSFER_FILE_NAME ,
                       FF.FILE_TYPE ,
                       BBS_ADD.PHONE_NUM,
                       BBS_ADD.QUESTION_CODE,
                       BBS_ADD.RECIVE_YN,
                       BBS_ADD.REPLY_CONTENTS ,
                       BBS_ADD.REPLY_YN,
                       BBS_ADD.SMS_YN,
                       BBS.TAG,
                       COUNT(*) OVER(PARTITION BY BBS.PARENT_SEQ ) AS CNT 
                         
                  FROM CHSY_BOARD BBS,
                       CHSY_BOARD_FILE FF ,
                       CHSY_BOARD_ADD BBS_ADD
                 WHERE BBS.DEL_YN='N'
                       AND BBS.BOARD_CODE = 'M61'
                       AND BBS.BOARD_SEQ = FF.PARENT_SEQ(+)
                       AND BBS.BOARD_SEQ = BBS_ADD.PARENT_SEQ(+)
                      
              ORDER BY BBS.PARENT_SEQ DESC ,BBS.BOARD_SEQ ASC
                )A
       ORDER BY PARENT_SEQ DESC ,BOARD_SEQ ASC
         )
   WHERE PAGE = 1

 

 

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

COUNT(decode (del_yn,'Y', null, 1 )) OVER(PARTITION BY BBS.PARENT_SEQ )

이걸 말씀하시는지?

채용근(taiji97)님이 2011-10-05 12:35에 작성한 댓글입니다.

이미 Where 절에서 걸러진 자료를 카운트하므로 문제 없습니다.

계층 구조라고 하셨는데 그부분이 어떻게 표현되는지 쿼리를 봐서는 잘 판단이 안서고요.

모두 다 조인하고 모두 다 카운트 하고 난 뒤 페이지 처리 하시네요.

일단 메인 테이블 하나만 가지고 페이지 처리 하신후에

최종 걸러진 자료만 가지고 조인 및 카운트 하세요.

이 때 카운트는 스칼라 서브쿼리로 셀프조인하세요.

마농(manon94)님이 2011-10-06 10:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38941DELETE 관련 간단한 질문요 [4]
궁그미
2011-10-06
4006
38940밑에 커서오류 이어서 문제..미치겠습니다. [3]
박주영
2011-10-05
4753
38939pl/sql 최대 열기 커서 수 에러 도움 급합니다. [3]
박주영
2011-10-05
4216
38937댓글의 총 갯수 [2]
서유미
2011-10-05
5900
38936ORA-29275 오라클 캐릭터 셋 관련..... [1]
곽정호
2011-10-04
6074
38935PL/SQL INSERT 문 질문입니다. [2]
박주영
2011-10-04
4518
38934오렌지에서 Trace 설정하는 방법좀 알려주세요 ^^:
정현석
2011-10-04
4859
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다