2016-08-24 3 views
-1

Netezzaを初めて使用しています.15列をターゲット表の行に変換する際に助けが必要です。Netezzaで列を行として取り込む方法

私はREGEXP関数を見つけましたが、正確な構文がわかりません。ここで

は一例です:

ソースは、私がここに6列を参照した

Col A 

1 
2 
3 
4 
5 
6 

Col 1 Col 2 Col 3 Col 4 Col 5 Col 6 
1  2  3  4  5 6 

期待ターゲットとしてそれを持っていますが、私はdidntのように、私は15列の3セットを持っています私は助けてください。

+0

ようこそスタックオーバーフロー!質問を編集して[これまでに試したこと](http://whathaveyoutried.com)を表示してください。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –

答えて

3

単純な方法はです:

select col1 as colA from t union all 
select col2 from t union all 
select col3 from t union all 
select col4 from t union all 
select col5 from t union all 
select col6 from t; 

私は正規表現の機能がネティーザに「アンピボット」行う方法基本的には、あなたの質問、としなければならないものを見ていません。

+0

返事ありがとうございましたGordon、他の選択肢はありません。 @Anusha。 – Anusha

+0

。 。実際には他の選択肢がありますが、「すべてのユニオン」で十分です。 –

0

あなたは14 UNIONを行うにはしたくない場合は、すべてのあなたはCROSSは1と15(または類似したもの)の間の数字で15行を返すテーブル/クエリにJOINを利用することができます:

select 
    case i 
     when 1 then col1 
     when 2 then col2 
     when 3 then col3 
     ... 
    end 
from tab 
cross join 
(
    select i from numbers_table where i between 1 and 15 
) dt 
+0

こんにちはDnoeth、私はここで説明し、dtテーブルと交差結合できますか? – Anusha

+0

私が言ったように、これは、ソーステーブルの各行を15回取得するクロス結合と、各列1から列15を単一の行 – dnoeth

0

クロス参入のアプローチ dnoethが言ったことに加えて、まずnumber_tableがあることを確認したいと思うでしょう。これはあなたが参加するテーブルになります。この場合、私は関数の一部ではありません。これは単なる列名です。 ColXという名前を付けることもできます。あなたの例では、6列あるので、6行、1-6を挿入しています。しかし、このテーブルのより大きなバージョンを保つことは便利かもしれません。

CREATE TABLE NUMBERS_TABLE 
(i INT); 
INSERT INTO NUMBERS_TABLE VALUES (1); 
INSERT INTO NUMBERS_TABLE VALUES (2); 
INSERT INTO NUMBERS_TABLE VALUES (3); 
INSERT INTO NUMBERS_TABLE VALUES (4); 
INSERT INTO NUMBERS_TABLE VALUES (5); 
INSERT INTO NUMBERS_TABLE VALUES (6); 

注:クロス結合によってデカルト積が作成されるため、注意が必要です。

WITH CTE AS (SELECT COL1, COL2, COL3, COL4, COL5, COL6 FROM ORIGINAL_TABLE) 

SELECT 
,CASE B.i 
    WHEN 1 THEN 'COL1' 
    WHEN 2 THEN 'COL2' 
    WHEN 3 THEN 'COL3' 
    WHEN 4 THEN 'COL4' 
    WHEN 5 THEN 'COL5' 
    WHEN 6 THEN 'COL6' 
    END AS UNPIVOTED_COLUMN_NAMES 
,CASE B.i 
    WHEN 1 THEN A.COL1 
    WHEN 2 THEN A.COL2 
    WHEN 3 THEN A.COL3 
    WHEN 4 THEN A.COL4 
    WHEN 5 THEN A.COL5 
    WHEN 6 THEN A.COL6 
    END AS COLUMN_A 
FROM CTE A CROSS JOIN 
(SELECT i FROM NUMBERS_TABLE WHERE i in ('1','2','3','4','5','6')) B 
関連する問題