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 40172 게시물 읽기
No. 40172
2건이상 select. 처리 질문
작성자
초보배움1(bizsi)
작성일
2013-06-24 17:28
조회수
9,128

  쿼리질문드립니다

--------데이터----------------
번호.   구분.    성명
111.     A.        홍길일 
111.     A.         홍길이
111.     B.         홍길삼
111.     B.         홍길사
111.      B.          홍길오
111.      C.          홍길육 
-----원하는데이터-----------
번호.    구분.   성명
111.       A.       홍길일외1명 
111.        B.        홍길삼외2명
111.        C.        홍길육  
--------------------
구분으로 몇명외 처리를 하고싶습니다
어렵네요
좋은의견 부탁드립니다
감사합니다
이 글에 대한 댓글이 총 3건 있습니다.

참고만 하셔서 더 좋은 쿼리 만들어 보세요.

---------------------------------------------------------------

WITH WITH_DATA AS (
    SELECT 111 NO, 'A' GB, '홍길일' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'A' GB, '홍길이' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길삼' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길사' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길오' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'C' GB, '홍길육' NAME FROM DUAL
)

SELECT NO, GB
     , CASE WHEN COUNT(*) <= 1 THEN NAME
       ELSE
            NAME||'외'||(COUNT(*)-1)||'명'
       END NAME
  FROM (
    SELECT NO, GB
         , FIRST_VALUE(NAME) OVER (PARTITION BY NO, GB) NAME
      FROM WITH_DATA
  ) T
 GROUP BY NO, GB, NAME
 ORDER BY NO, GB;

forever님이 2013-06-24 17:40에 작성한 댓글입니다. Edit

 네 정말감사합니다

초보배움1(bizsi)님이 2013-06-24 17:56에 작성한 댓글입니다.

대표자 이름을 아무나 해도 상관이 없다면 아래처럼 구현해도 되지 않을까요?

----------------------------------------------------------------------------------------------------------------------

WITH WITH_DATA AS (
    SELECT 111 NO, 'A' GB, '홍길일' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'A' GB, '홍길이' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길삼' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길사' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'B' GB, '홍길오' NAME FROM DUAL UNION ALL
    SELECT 111 NO, 'C' GB, '홍길육' NAME FROM DUAL
)
SELECT NO, GB
     , CASE WHEN COUNT(*) <= 1 THEN MIN(NAME)
       ELSE
             MIN(NAME)||'외'||(COUNT(*)-1)||'명'
       END NAME
  FROM  WITH_DATA
 GROUP BY NO, GB
 ORDER BY NO, GB;

forever님이 2013-06-24 18:07에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40176초보 좀 살려주세요. [1]
아이고
2013-06-26
6135
40174php 에서 프로시저 호출 문제 질문드려요
김현
2013-06-25
6653
40173질문있어요. [1]
낙천
2013-06-25
5789
401722건이상 select. 처리 질문 [3]
초보배움1
2013-06-24
9128
40170소수점 처리 관련 질문 [3]
스펙터클
2013-06-24
6892
40168도와주세요 [2]
2013-06-21
6100
40167datetime 변환 부탁합니다. [3]
jack49
2013-06-21
6663
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다