왕초보 질문합니다. 0 5 814

by 이름입니다 [2018.10.23 17:19:01]


Screenshot_1.png (8,503Bytes)

이렇게 하면 첨부한 사진처럼 결과값이 나오는데요

원하는 결과 값은

전체   사용테이블   현행화   미현행화   미사용테이블   현행화   미현행화   미파악   현행화   미현행화

10                           0              5           3         2           3        0        3

이런 모습입니다.  어떻게 해야될까요?

 

소스입니다.

   SELECT A.GUBUN AS 구분
        , COUNT(A.CUR_YN) 전체건수
        , COUNT(CASE WHEN A.CUR_YN = 'Y' THEN 1 END ) 현행화
        , COUNT(CASE WHEN A.CUR_YN = 'N' THEN 1 END ) 미현행화
        , COUNT(DISTINCT CASE WHEN A.USE_YN = 'Y' THEN A.TB_PHY_NAME END) AS "사용테이블"
        , COUNT(DISTINCT CASE WHEN A.USE_YN = 'N' THEN A.TB_PHY_NAME END) AS "미사용테이블" 
        , COUNT(DISTINCT CASE WHEN A.USE_YN = 'X' THEN A.TB_PHY_NAME END) AS "미파악테이블"
     FROM
        (
           SELECT   A.GUBUN
                  , A.USE_YN
                  , A.TB_PHY_NAME
                  , MIN(CASE WHEN B.TB_PHY_NAME IS NOT NULL
                             THEN 'Y'
                             ELSE 'N'
                         END
                        ) AS CUR_YN     -- 현행화 여부
           -----------------------------------------------------------
             FROM TB_DB_LIST A
             LEFT OUTER JOIN 
                  TB_ERD_LIST B
               ON A.TB_PHY_NAME   = B.TB_PHY_NAME 
              AND A.COL_PHY_NAME  = B.COL_PHY_NAME
              AND A.COL_TYPE      = B.COL_TYPE
              AND A.PK_YN         = B.PK_YN
         GROUP BY A.TB_PHY_NAME
                , A.GUBUN
                , A.USE_YN
        ) A
    GROUP BY A.GUBUN 
   ;

 

by 마농 [2018.10.23 17:49:47]

 a 가 테이블이고 b 가 현행화 인가요?
 a : b 의 관계가 어떻게 되나요? 1:1 인가요? 1:다 인가요?
 1:1 관계라면? group by 가 필요 없어 보이고?
 1:다 관계라면? 한 테이블이 여러번 현행화 된다는 거네요?
 그중 한번이라도 현행화 되었으면 형행화 되었다고 판단하는 거네요?
 현행화 판단기준이 좀 모호합니다.


by 이름입니다 [2018.10.23 17:53:06]

네 1대 다 관계이고,

테이블 안에 있는 컬럼들 중 현행화 안된게 하나라도 있다면 안됐다고 판단 한 것 입니다..!


by 마농 [2018.10.23 17:59:32]

아 컬럼까지 비교한 거네요?
그러면 이해가 갑니다.
다만 추가 의문이 생겼네요?
use_yn 은 테이블에 종속인가요? 컬럼에 종속인가요?
 - 테이블에 종속된 거라면? a 테이블 설계가 좀 이상해 보이고?
 - 컬럼에 종속된 거라면? 통계가 좀 이상하게 나올 것 같네요?
 - 한 테이블에 컬럼별 use_yn 의 종류가 3개가 된다면?
 - 1개 테이블이 3번 카운트 되게 됩니다.


by 마농 [2018.10.23 17:53:35]
SELECT gubun    AS 구분
     , COUNT(*) AS 전체건수
     , COUNT(CASE WHEN use_yn = 'Y'                  THEN 1 END) AS 사용_소계
     , COUNT(CASE WHEN use_yn = 'Y' AND cur_yn = 'Y' THEN 1 END) AS 사용_현행화
     , COUNT(CASE WHEN use_yn = 'Y' AND cur_yn = 'N' THEN 1 END) AS 사용_미현행화
     , COUNT(CASE WHEN use_yn = 'N'                  THEN 1 END) AS 미사용_소계
     , COUNT(CASE WHEN use_yn = 'N' AND cur_yn = 'Y' THEN 1 END) AS 미사용_현행화
     , COUNT(CASE WHEN use_yn = 'N' AND cur_yn = 'N' THEN 1 END) AS 미사용_미현행화
     , COUNT(CASE WHEN use_yn = 'X'                  THEN 1 END) AS 미파악_소계
     , COUNT(CASE WHEN use_yn = 'X' AND cur_yn = 'Y' THEN 1 END) AS 미파악_현행화
     , COUNT(CASE WHEN use_yn = 'X' AND cur_yn = 'N' THEN 1 END) AS 미파악_미현행화
  FROM (SELECT a.gubun
             , a.tb_phy_name
             , a.use_yn
             , NVL2(MIN(b.tb_phy_name), 'Y', 'N') cur_yn AS  -- 현행화 여부
          FROM tb_db_list a
          LEFT OUTER JOIN
               tb_erd_list b
            ON a.tb_phy_name   = b.tb_phy_name
           AND a.col_phy_name  = b.col_phy_name
           AND a.col_type      = b.col_type
           AND a.pk_yn         = b.pk_yn
         GROUP BY a.gubun
             , a.tb_phy_name
             , a.use_yn
        ) a
 GROUP BY a.gubun
;

 


by 이름입니다 [2018.10.23 17:59:00]

와 감사합니다!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입