如何在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