2012-02-23 2 views
3

안녕 나는 아래있는 테이블의 구조를 테스트 있습니다 원하는 출력

**Testing** 

    PK C1 c2 
--------------- 
1  v11 v12 
2  v21 v23 
3  v31 v32 

지금 나는 아래의 출력을 얻을 수 있도록이 테이블 (테스트)를 쿼리해야합니다.

Pk Key value 
--------------- 
1 c1 v11 
1 c1 v12 
2 c2 v21 
2 c2 v22 
3 c3 v31 
3 c3 v32 

Oracle 11g에서 sql 쿼리를 사용하면이 작업을 수행 할 수 있습니까? 11g에서 PIVOT 기능을 사용할 수 있습니까?

+0

누구든지이 질문에 가능한 또는 이걸 proc 작성해야 할 수 있습니다. –

답변

2

아니, 그것은 PIVOT 함께 할 수는 없지만, UNPIVOT으로 수행 할 수 있습니다 UNPIVOT를 사용할 수 없을 때

SELECT 
    Pk, 
    "Key", 
    value 
FROM Testing 
UNPIVOT (
    value FOR "Key" IN (C1, C2) 
) 

그리고, 나는 종종 이런 식으로 피벗 해제 :

SELECT 
    t.Pk, 
    x."Key", 
    CASE x."Key" 
    WHEN 'C1' THEN t.C1 
    WHEN 'C2' THEN t.C2 
    END AS value 
FROM Testing t 
CROSS JOIN (
    SELECT 'C1' AS "Key" FROM DUAL UNION ALL 
    SELECT 'C2' FROM DUAL 
) x 
+0

Awsome explaination Andriny –