SELECT문

 

1. GROUP 순번_RANK 매기기

2. 컬럼을 ROW화

 

 

조직별로 각사원 급여 지급 순위 메기기 와  전사원에 대한 순위 메기기

SELECT org_id, emp_id, pay_mon,

               RANK() OVER(PARTITION BY org_id ORDER BY pay_mon DESC) as rank_of_org_id,

               RANK() OVER(ORDER BY pay_mon DESC) AS rank_of_all

FROM     py_payroll

WHERE  pay_ymd = '20040123'

ORDER   BY org_id, pay_mon desc;

 

결과]

 

 

설명]

RANK() OVER(PARTITION BY org_id ORDER BY pay_mon DESC) as rank_of_org_id,

   ; org_id 로 partition을 나누고, pay_mon 으로 order by를 DESC 순으로 해서 RANK(순위)를 매긴다.

 RANK() OVER(ORDER BY pay_mon DESC) AS rank_of_all

  ; 전체를 대상으로 pay_mon 으로 order by 를 DESC 순으로 해서 RANK(순위)를 매긴다.

 

컬럼으로 되어 있는 값을 로우(ROW)로 시키기

실제값]

       

 

원하는 결과]

      

 

SQL문]

SELECT decode(seq, 1, a1, 2, b1, c1 ),

             decode(seq, 1, a2, 2, b2, c2 ),

             decode(seq, 1, a3, 2, b3, c3 )

FROM   (

              SELECT seq, a1, a2, a3, b1, b2, b3, c1, c2, c3

              FROM    (SELECT 'A11' a1, 'A12' a2, 'A13' a3, 'B11' b1, 'B12' b2, 'B13' b3, 'C11' c1, 'C12' c2, 'C13' c3

                             FROM   DUAL

                             UNION ALL

                             SELECT 'A21' a1, 'A22' a2, 'A23' a3, 'B21' b1, 'B22' b2, 'B23' b3, 'C21' c1, 'C22' c2, 'C23' c3

                             FROM   DUAL

                             UNION ALL

                             SELECT 'A31' a1, 'A32' a2, 'A33' a3, 'B31' b1, 'B32' b2, 'B33' b3, 'C31' c1, 'C32' c2, 'C33' c3

                             FROM   DUAL), sys_dual

              WHERE  seq <= 3 ) ;

      

   
   

 

'(DB) Oracle > SQL' 카테고리의 다른 글

Oracle - 예제_SUBQUERY  (0) 2017.01.18
Oracle - 예제_SELECT_GROUP  (0) 2017.01.18
Oracle - 예제_MERGE  (0) 2017.01.18
Oracle - 예제_INSERT  (0) 2017.01.18
Oracle - 예제_DELETE  (0) 2017.01.18
Posted by 농부지기
,