고수님 쿼리 질문 드립니다. 0 2 852

by InsideCore [SQL Query] [2017.12.29 07:41:50]


IMAGE1.jpg (192,435Bytes)

안녕하세요..

 

고수님들..

아래 Image처럼 DATA를 보여주고 싶은데요.

SQL로 가능할까요?

 

직접 SQL을 작성시도 하였으나,...도저히 생각이 안나네요..ㅠㅠ

고수님들의 도움 요청 드립니다.

by 무지버기 [2017.12.29 09:20:55]
-- 일자가 고정되어있다는 전제하에 작성하여 보았습니다.

WITH t(dt,nat,city,zone,name,age,seq) AS(
    SELECT '2017-12-27','대한민국','서울시','강서구','이름1',30,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름2',31,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름3',32,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름4',33,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름5',34,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름6',35,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름7',36,1 FROM DUAL UNION ALL
    SELECT '2017-12-27','대한민국','서울시','강서구','이름8',37,1 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름1',30,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름2',31,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름3',32,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름4',33,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름5',34,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름6',35,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름7',36,0 FROM DUAL UNION ALL
    SELECT '2017-11-27','대한민국','서울시','강서구','이름8',37,0 FROM DUAL 
)
SELECT
*
FROM (
    SELECT 
    dt
    ,DECODE(gb,'NAT','국가','CITY','도시','ZONE','지역',data) gb
    ,CASE WHEN gb NOT IN('NAT','CITY','ZONE') THEN TO_CHAR(age) ELSE data END data
    FROM t
    UNPIVOT(data FOR gb IN(nat,city,zone,name))
)   PIVOT(MIN(data) FOR dt IN ('2017-11-27','2017-12-27')) 
ORDER BY  INSTR('지역|도시|국가',gb) DESC,gb

 


by 이상필 [2017.12.29 10:54:22]
WITH RT AS (
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름1' AS NAME, 30 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름2' AS NAME, 31 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름3' AS NAME, 32 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름4' AS NAME, 33 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름5' AS NAME, 34 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름6' AS NAME, 35 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름7' AS NAME, 36 AS AGE, 1 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름8' AS NAME, 37 AS AGE, 1 AS NO FROM DUAL UNION ALL
  
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름1' AS NAME, 30 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름2' AS NAME, 31 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름3' AS NAME, 32 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름4' AS NAME, 33 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름5' AS NAME, 34 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름6' AS NAME, 35 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름7' AS NAME, 36 AS AGE, 0 AS NO FROM DUAL UNION ALL
  SELECT '2017-12-27' AS UDATE, '대한민국' AS NATION, '서울시' AS CITY, '강서구' AS AREA, '이름8' AS NAME, 37 AS AGE, 0 AS NO FROM DUAL
)
/******************************************
 * 행 -> 열
 ******************************************/
SELECT GUBUN
     , MAX(CASE WHEN NO = 1 AND LV  = 5 THEN TO_CHAR(COL_B) 
                WHEN NO = 1 AND LV <> 5 THEN COL_A 
            END) AS COL1 
     , MAX(CASE WHEN NO = 0 AND LV  = 5 THEN TO_CHAR(COL_B) 
                WHEN NO = 0 AND LV <> 5 THEN COL_A END
          ) AS COL0
  FROM (/******************************************
         * 열 -> 행
         ******************************************/
        SELECT A.NO
             , B.LV
             , DECODE(B.LV, 5, A.NAME , B.GUBUN) AS GUBUN
             , DECODE(B.LV, 1, A.UDATE, 2, A.NATION, 3, A.CITY, 4, A.AREA, 5, A.NAME, 6, A.AGE) AS COL_A
             , DECODE(B.LV, 5, A.AGE  , NULL) AS COL_B
          FROM RT A
             , (SELECT 1 AS LV, 'UPDATE 일자' AS GUBUN FROM DUAL UNION ALL
                SELECT 2 AS LV, '국가'        AS GUBUN FROM DUAL UNION ALL
                SELECT 3 AS LV, '도시'        AS GUBUN FROM DUAL UNION ALL
                SELECT 4 AS LV, '지역'        AS GUBUN FROM DUAL UNION ALL
                SELECT 5 AS LV, '이름'        AS GUBUN FROM DUAL
               ) B
       )  
 GROUP BY GUBUN, LV
 ORDER BY LV 

;  

 

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