2017-02-14 1 views
1

솔루션 1의 here에서 변형 된 다음 SQL 스크립트를 사용하여 배열을 개별 행으로 변환하려고합니다.배열을 Netezza의 행으로 변환

실행할 때 배열의 첫 번째 요소 만 검색합니다. 배열의 모든 요소를 ​​표시하고 싶습니다. 어제,이 스크립트의 일부를 수정 한 것을 기억하고 올바르게 실행 된 것으로 보입니다. 그러나 나는 대본을 저장하지 않았다!

기본적으로
SELECT F.ROWID 
     , C.CNT 
     , SQLEXT..get_value_varchar(ARR,CAST(DECODE(SIGN(LEN-c.CNT),1,c.CNT,null) AS INT)) AS ELEMENT_NM 
FROM (SELECT ROWID 
       , SQLEXT..ARRAY_SPLIT(FINELINE_NM,';')  AS ARR 
       , SQLEXT..ARRAY_COUNT(SQLEXT..ARRAY_SPLIT(FINELINE_NM,';')) AS LEN 
     FROM DATABASE.DEV_LDG_REPORT   
     )             AS F 
CROSS JOIN (SELECT ROW_NUMBER() OVER (ORDER BY 1)   AS CNT 
      FROM (SELECT * 
         FROM DATABASE.DEV_LDG_REPORT 
         LIMIT 100)       AS V 
      )            AS C 
WHERE DECODE(SIGN(LEN-C.CNT),1, C.CNT, NULL) IS NOT NULL 
; 

,이를 좋아하는 것 :

ID  FINELINE_NM 
1   123 
1   124 
1   125 
2   123 
2   124 
2   125 
2   126 

는 모든 수를 볼 수 있습니다 위의 스크립트에서 수정이 있습니다

ID  FINELINE_NM 
1   123;124;125 
2   123;124;125;126 

는 다음과 같이하기 결과로 반환되는 요소는 무엇입니까?

+0

Welcome to StackOverflow! 잠시 후 변경되거나 삭제 될 수있는 실질적인 관련 세부 정보가 포함 된 외부 소스에 연결하는 것을 삼가 해주십시오. 링크를 포함하는 것은 좋지만 질문과 관련된 모든 것을 질문 자체에 포함시키는 것을 고려하십시오. – STLDeveloper

답변

0

는 지금까지 내가 이해 :

  • CROSS JOIN의 표 C 그냥 배열 위치에 인덱스 번호 목록을 생성하는 것입니다. 적은 수의 기록 항목 배열이보다 DATABASE.DEV_LDG_REPORT에있는 경우, 당신은
  • 또한, DECODE(SIGN(LEN-c.CNT),1,c.CNT,null) 반환 LEN = c.CNT (즉, SIGN가 0) 때 널 (null) 끝에 도달하지 않을 것이다, 그래서 이것은 마지막 항목을 그리워합니다 배열 함수 내에서 LEN+1-c.CNT을 사용하는 것이 더 좋습니다.