2012-05-08 4 views
-1

Oracle 데이터베이스에는 아래와 같은 데이터가있는 테이블이 있습니다.행을 Oracle의 열로 변환하는 방법은 무엇입니까?

emp_num person_name organization earned_date sum(hours) 
------- ----------- ------------ ----------- ---------- 
36372 Name1  Test1   23-MAR-11  3.17 
36372 Name1  Test1   15-MAR-11  6.70 
40208 Name2  Test2   08-APR-11  13.50 
40208 Name2  Test2   06-APR-11  12.07 

다음과 같이 쿼리 출력을 변경해야합니다. 어떻게해야합니까?

emp_num person_name organization 23-MAR-11 15-MAR-11 08-APR-11 06-APR-11 
------- ----------- ------------ --------- --------- --------- --------- 
36372  Name1  Test1   3.17  6.70  
40208  Name2  Test2         13.50  12.70  
+2

아마도 도움이 될 것입니다. http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID : 766825833740 –

답변

0
select 
    emp_num, 
    person_name, 
    organization, 
    sum(decode(earned_date,to_date('23/03/2011','dd/mm/yyyy'),hours,0)) 23mar11, 
    sum(decode(earned_date,to_date('15/03/2011','dd/mm/yyyy'),hours,0)) 15mar11, 
    sum(decode(earned_date,to_date('08/04/2011','dd/mm/yyyy'),hours,0)) 08apr11, 
    sum(decode(earned_date,to_date('06/04/2011','dd/mm/yyyy'),hours,0)) 06apr11 
from 
    the_table //don't know the name 
group by 
    emp_num, 
    person_name, 
    organization 

항상 문자열에 날짜를 비교하기 위해 TO_DATE 함수를 사용하여, 나는 여기에 일반적인 영국의 형식을 사용했다.

+0

감사합니다. 나는 동적 열이 필요하다. table data.it에있는 날짜가 자동으로 pe 날짜로 coulmns를 작성해야한다. – sant

1

동적 SQL을 사용하지 않는 한 동적으로 테이블의 컬럼 이름을 지정할 수 없습니다.

그런데
select emp_num, person_name, organization, 
     sum(decode(datenum, 1, hours, 0)) as date1hours, 
     sum(decode(datenum, 2, hours, 0)) as date2hours, 
     ... 
     min(decode(datenum, 1, earned_date) as date1, 
     min(decode(datenum, 2, earned_date) as date2, 
     ... 
from 
(
    select t.*, 
    dense_rank() over (partition by NULL order by earned_date) as datenum 
    from the_table t 
) t 
group by emp_num, person_name, organization 

는, 오라클 10g는 CASE 구문을 지원하고, 난 당신이 대신 decode의를 사용하도록 권합니다 : 그러나, 당신은 당신이 일반적인 날짜 열을 사용하여 원하는 것을 얻을 수 있습니다.

+0

케이스 문법을 사용하여 나를 도와 주겠다. – sant

+0

대문자로 행을 옮길 수있는 방법은 무엇입니까? 대소 문자를 사용했습니다. 몇 시간 전에 같이 ID를 을 선택하십시오 이름이 null이 아닌 경우 'N/A'끝 테이블에서하지만 그 피벗 또는 transposing에 사용하지 않는 것 같아요. –

+0

@KhurramZulfiqarAli. . . 당신은 원래의 작전이 아닙니다. 나는 당신이 당신의 필요에 특정한 질문을 할 것을 제안합니다. –

관련 문제