2017-02-14 6 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;124;125 
2   123;124;125;126 

を:

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

あなたはそれがすべての可能見ることができる上記のスクリプトのいずれかの変更があります結果に返される要素は?私の知る限り理解し

+0

ようこそStackOverflow!ご了承の上、後ほど変更または削除される可能性があるため、関連性の高い詳細を含む外部ソースにリンクすることはお控えください。リンクを含めることは大丈夫ですが、質問に関連するものを質問自体に含めることを検討してください。 – STLDeveloper

答えて

0

  • テーブルCROSS JOINCはちょうど配列位置のインデックスへの番号のリストを生成することです。少ないレコードエントリが配列であるよりも、DATABASE.DEV_LDG_REPORTである場合は、
  • また、DECODE(SIGN(LEN-c.CNT),1,c.CNT,null)リターンがLEN = c.CNT(すなわちSIGNが0である)ときはnull最後に到達しないので、これが最後のエントリを欠場します配列。より良いLEN+1-c.CNTSIGN関数内で使用することをお勧めします。