在netezza中需要将列转换为行,请帮助例如
*ip
需要输出
emp id dept
abc 10 CS
xyz 20 Maths
答案 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
程序。