2014-06-05 4 views
0

사전에 도움을 주셔서 감사합니다. 알아낼 수없는 것처럼 보입니다.오라클 턴 테이블 측면에

Oracle DB 버전 11을 실행 중입니다. 내가해야하는 테이블 (PO_INFO_DATA) 다음과 같다 :

PO_NUMBER | INFO_ID | INFO_DATA | 

각 PO_NUMBER 1에서 40에 할당 된 최대 40 INFO_IDs을 가질 수 있으며 각 INFO_ID는 해당 INFO_DATA있을 것이다. 예를 들어,

등이 있습니다.

제가하고 싶은 것은이 형식에 표시됩니다

PO_NUMBER | INFO_DATA_1 | INFO_DATA_2 | INFO_DATA_3 | ... and so on till INFO_DATA_40 

이 시도 :

SELECT 
    PO_NUMBER, 
    DECODE (INFO_ID, 1, INFO_DATA) INFO_DATA_1, 
    DECODE (INFO_ID, 2, INFO_DATA) INFO_DATA_2, 
    DECODE (INFO_ID, 3, INFO_DATA) INFO_DATA_3, 
    DECODE (INFO_ID, 4, INFO_DATA) INFO_DATA_4, 
    DECODE (INFO_ID, 5, INFO_DATA) INFO_DATA_5, 
    DECODE (INFO_ID, 6, INFO_DATA) INFO_DATA_6, 
    DECODE (INFO_ID, 7, INFO_DATA) INFO_DATA_7, 
    DECODE (INFO_ID, 8, INFO_DATA) INFO_DATA_8, 
    DECODE (INFO_ID, 9, INFO_DATA) INFO_DATA_9, 
    DECODE (INFO_ID, 10, INFO_DATA) INFO_DATA_10, 
    DECODE (INFO_ID, 11, INFO_DATA) INFO_DATA_11, 
    DECODE (INFO_ID, 12, INFO_DATA) INFO_DATA_12, 
    DECODE (INFO_ID, 13, INFO_DATA) INFO_DATA_13, 
    DECODE (INFO_ID, 14, INFO_DATA) INFO_DATA_14, 
    DECODE (INFO_ID, 15, INFO_DATA) INFO_DATA_15, 
    DECODE (INFO_ID, 16, INFO_DATA) INFO_DATA_16, 
    DECODE (INFO_ID, 17, INFO_DATA) INFO_DATA_17, 
    DECODE (INFO_ID, 18, INFO_DATA) INFO_DATA_18, 
    DECODE (INFO_ID, 19, INFO_DATA) INFO_DATA_19, 
    DECODE (INFO_ID, 20, INFO_DATA) INFO_DATA_20, 
    DECODE (INFO_ID, 21, INFO_DATA) INFO_DATA_21, 
    DECODE (INFO_ID, 22, INFO_DATA) INFO_DATA_22, 
    DECODE (INFO_ID, 23, INFO_DATA) INFO_DATA_23, 
    DECODE (INFO_ID, 24, INFO_DATA) INFO_DATA_24, 
    DECODE (INFO_ID, 25, INFO_DATA) INFO_DATA_25, 
    DECODE (INFO_ID, 26, INFO_DATA) INFO_DATA_26, 
    DECODE (INFO_ID, 27, INFO_DATA) INFO_DATA_27, 
    DECODE (INFO_ID, 28, INFO_DATA) INFO_DATA_28, 
    DECODE (INFO_ID, 29, INFO_DATA) INFO_DATA_29, 
    DECODE (INFO_ID, 30, INFO_DATA) INFO_DATA_30, 
    DECODE (INFO_ID, 31, INFO_DATA) INFO_DATA_31, 
    DECODE (INFO_ID, 32, INFO_DATA) INFO_DATA_32, 
    DECODE (INFO_ID, 33, INFO_DATA) INFO_DATA_33, 
    DECODE (INFO_ID, 34, INFO_DATA) INFO_DATA_35, 
    DECODE (INFO_ID, 35, INFO_DATA) INFO_DATA_35, 
    DECODE (INFO_ID, 36, INFO_DATA) INFO_DATA_36, 
    DECODE (INFO_ID, 37, INFO_DATA) INFO_DATA_37, 
    DECODE (INFO_ID, 38, INFO_DATA) INFO_DATA_38, 
    DECODE (INFO_ID, 39, INFO_DATA) INFO_DATA_39, 
    DECODE (INFO_ID, 40, INFO_DATA) INFO_DATA_40 
    FROM 
     PO_INFO_DATA 
    ORDER BY PO_NUMBER ; 

이 측면에있는 테이블을 넣어 그러나 그것을 않는 한 그것은 일종의 작품, 다음과 같이 출력에 여러 행을 만듭니다.

PO_NUMBER | INFO_DATA_1 | INFO_DATA_2 | INFO_DATA_3..... 
500000 | DRAMA  |    | 
500000 |    | BELT  | 
500000 |    |    | SPANDEX 
500001 | 34572  |    | 
500001 |    | BONGO  | 
500001 |    |    | POLYESTER 

이 테이블에는 여러 개의 행이 필요하지 않습니다. 각 PO에는 행이 하나만 있어야합니다. 내 쿼리를 올바르게 다시 작성하도록 도와주세요.

+0

켄의 최대 값을 가질 수, 유연한 아니라고

주, 당신은, 난 전에 올바른 찾을 수있다 나는 보았다. 고마워, 정확히 내가 필요로하는거야! –

답변

1

난 당신 같은 뭔가를 찾고 있었다 생각 :

SELECT po_number, 
      MAX (DECODE (info_id, 1, info_data, NULL)) INFO_DATA_1, 
      MAX (DECODE (info_id, 2, info_data, NULL)) INFO_DATA_2, 
      MAX (DECODE (info_id, 3, info_data, NULL)) INFO_DATA_3, 
      ... 
     FROM po_info_data 
     group by po_number 
     Order by po_number; 

그냥 INFO_DATA_40까지 모든 당신 가능한 경우에 추가 할 수 있습니다. 당신이 최대 40 열을 가질 수 있습니다 가정을 용액으로 info_id 열을 의미하는 40

+0

바딤 보! 훌륭하게, 이것은 내가 필요한만큼 정확하게 작동합니다. 정말 고맙습니다! –