列到行--Netezza

时间:2015-11-30 07:52:16

标签: netezza

在netezza中需要将列转换为行,请帮助例如

*ip

需要输出

emp id dept
abc 10  CS
xyz 20  Maths

3 个答案:

答案 0 :(得分:0)

您可以使用UNION ALL来完成此操作,但您需要确定目标列应该是什么数据类型。

您没有为样本数据指定类型,但可能是这样的:

create table row_split (emp varchar(40), id integer, dept varchar(15));

在这种情况下,您需要将列转换为适合每个源列的数据类型的列。在这种情况下,varchar(40)是显而易见的选择。

select emp::varchar(40) result_column from row_split
union all
select id::varchar(40) result_column from row_split
union all
select dept::varchar(40) result_column from row_split;


 RESULT_COLUMN
---------------
 Maths
 xyz
 20
 CS
 abc
 10
(6 rows)

答案 1 :(得分:0)

使用nzsql netezza查询工具(如果您使用linux / unix访问netezza数据库),可以更轻松地完成此操作。

nzsql提供输出Field分隔符选项。

假设数据存储在employee表中,并为主机,用户名,密码和数据库设置和导出所有环境变量。

export NZ_USER=<username>
export NZ_PASSWORD=<password>
export NZ_DATABASE=<database>
export NZ_HOST=<hostname>

nzsql -F $'\n' -Atc 'select * from employee;'

abc
10
CS
xyz
20
Maths

此解决方案的唯一缺点是,它仅适用于Linux / Unix,您可以使用nzsql实用程序。

答案 2 :(得分:0)

如果您尝试将列转换为行, 那你不应该期待:

emp  abc xyz
id   10  20
dept CS  Maths

如果您尝试转置矩阵,可以使用TRANSPOSE程序。