如何在Netezza中将列填充为行

我是Netezza的新手,我需要您的帮助将15列转换为目标表中的行。如何在Netezza中将列填充为行

我遇到过REGEXP函数,但我不确定确切的语法。

这里是例子:

来源有它作为

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

1 2 3 4 5 6

预期目标

Col A 

1

2

3

4

5

6

我在这里引用的6列,但我有3套15列,这样我没有感觉结合是一个正确的选择。请帮我

回答:

一个简单的方法是union all

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;

我看不出有什么正则表达式的功能与你的问题,这基本上是如何在Netezza公司做“逆透视”做。

回答:

如果你不想做的14 UNION ALL你可以利用CROSS JOIN到一个表/查询与1和15(或类似的东西)之间的数字返回15行:

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

回答:

交叉加入方法 加入dnoeth说的话,你首先要确保你有一个numbers_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

以上是 如何在Netezza中将列填充为行 的全部内容, 来源链接: utcz.com/qa/262690.html

回到顶部