2014-09-05 2 views
1

이 사이트에는 많은 예제가 있지만 여전히 솔루션을 얻지 못했습니다. 질문을 게시합니다.
제발이 문제를 해결할 수있는 방법을 제안 해주세요. Iam oracle에서 작업 중 11gR1 버전.oracle 11gR1의 열로 변환

year   price  Quantity 
1991   10  50 
2008   20  96 

은 내가 피벗 기능을 시도했지만 달성되지 및 SQL 명령과 예외가 제대로 종료되지지고 출력

1991 10 
1991 20 
2008 50 
2008 96 

으로합니다. 아래는
입니다. SQL에서는 좋지 않습니다. 위의 질문에 대한

select * from (select year, price ,quanty from my_table) 
     pivot(min(year) year in (price, quanty)); 

편집 : 전 제품의 이름 이름으로 하나 더 열이있는 경우 위의 쿼리

select year, value 
from my_table 
unpivot 
(
    value 
    for col in (price, quantity) 
) u 

는, VARCHAR, 점점 스피 인 나는 위의 열을 전달 다음과 같이 쿼리하십시오.

select year, value 
    from my_table 
    unpivot 
    (
     value 
     for col in (price, quantity,productname) 
    ) u 

ORA-01790

으로 점점 오류 : 식을

이에 제안 @BlueFeet하십시오 발현 대응과 동일한 데이터 유형을 가지고 있어야합니다.

+0

ORA-01790 오류 읽기 자명 오류가, 당신은 그렇게 생각하지 않아요? – zaratustra

답변

3

피벗 대신 UNPIVOT이 필요합니다. unpivot은 여러 행을 여러 열로 변환하는 프로세스입니다.

select year, value 
from my_table 
unpivot 
(
    value 
    for col in (price, quantity) 
) u 

SQL Fiddle with Demo를 참조하십시오 : 당신은 오라클 11g를 사용하고 있기 때문에

, 당신은 UNPIVOT 기능을 사용할 수 있습니다.

또한 UNION ALL를 사용하여이를 작성할 수

select year, price as value 
from my_table 
union all 
select year, quantity as value 
from my_table 

당신은 또한 최종 결과에 varchar 열을 포함 할 사실을 바탕으로 SQL Fiddle with Demo

, 당신은 변환해야합니다 참조 모든 열은 같은 데이터 유형을 할 수 - 당신이 하위 쿼리에서이 작업을 수행 할 수 있습니다

select year, value 
from 
(
    select year, 
    to_char(price) as price, 
    to_char(quantity) as quantity, 
    productname 
    from my_table 
) 
unpivot 
(
    value 
    for col in (price, quantity, productname) 
) u; 

참조 SQL Fiddle with Demo

1

이 시도 :

with t(year, price, Quantity) as(
    select 1991, 10, 50 from dual union all 
    select 2008, 20, 96 from dual 
) 
select year, new_col1 
    from t 
unpivot (
    new_col1 for new_col in (price, quantity)) 

YEAR NEW_COL1 
---------------- 
1991 10 
1991 50 
2008 20 
2008 96 

here