2017-03-16 1 views
0

에 수직으로 수평 테이블을 변환 나는 다음과 같은 테이블 형식이 :오라클

출력 :

A B C 
--- --- --- 
aa bb cc 
ay bx ct 

I

ID | Key | Value 
-- --- ----- 
1  A  aa  
2  B  bb 
3  A  ay 
4  C  cc 
5  B  bx 
6  C  ct 

나는 다음과 같은 형식으로이 테이블을 변환 할 필요를 oracle 11g에서 PIVOT 함수를 찾았지만 입력 테이블의 "Key"값은 고정 값 집합이 아니며 아무거나 될 수 있습니다. 나는 또한 다른 그런 질문을 찾았지만 내 경우에는 어떻게 쿼리를 작성해야하는지 잘 모르겠습니다.

감사합니다. 감사합니다.

편집 : 솔루션에 대한

, 나는 다음과 같은 쿼리를 실행하고자하지만 IN 절의 하위 쿼리에서 나에게 오류를 제공합니다. 나는 왜 그런지 이해하지 못합니다.

Select * from (Select Key, Value, Id from tableName 
pivot (max(Value) for Key IN (SELECT distinct Key from tableName))); 

고마워요!

답변

1

다음과 같이 피벗 기능을 적용 할 수 있습니다. 당신은 키라고 말했듯이 당신은 동적 SQL을 사용할 수 있습니다

Select * from (Select Key, Value, Id from tableName) 
pivot xml (max(Value) for Key IN (SELECT distinct Key from tableName)); 
+0

@Tom에 감사하지만 제안한대로 괄호를 사용하여 문제를 해결하지 못했습니다. 하위 쿼리가있는 Pivot에 대한 예제가없는 이유를 알지 못합니다. – OutOfMind

+1

하위 쿼리를 사용하려면'pivot xml'을 사용해야한다고 생각합니다. xml 형식으로 출력됩니다. –

+0

흠,하지만 xml 태그가없는 표 형식의 출력이 필요하므로 우선 하위 쿼리를 실행하고 피벗 쿼리에서 해당 결과를 사용합니다. 감사! – OutOfMind

1

:

select * from 
    (select Key,Value from yourtable) 
    pivot(max(Value) for Key in ('A', 'B', 'C')); 

피벗에서 하위 쿼리는 다음과 같이 쿼리 확인에만 XML 키워드

과 함께 사용 고정되지 않음 키 문자열이 생성되어 도움이 될 것입니다. 이 문자열을 피벗 함수에 전달하면 키가 문자열에 있으므로이 점이 도움이 될 것입니다.

+0

감사합니다. @Rohit, 질문을 편집했습니다. 한번보세요. 피벗 함수는 이러한 하위 쿼리를 허용합니까? 아니면 귀하의 제안에 따라 동적 SQL을 사용해야할까요? – OutOfMind

+1

하위 쿼리를 사용하면 피벗 테이블의 동적 쿼리가 어떻게 도움이되는지 이해할 수있는 링크를 참조하십시오. http://stackoverflow.com/questions/13245364/ms-sql-server-pivot-table-with-subquery-in-column-clause –

+0

@RohitGupta 추가 한 링크는 SQL Server 용입니다. 질문은 'oracle'을위한 것입니다. –