首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sql添加一个列,即每个记录中的单位是计算其他列的结果?

如何使用sql添加一个列,即每个记录中的单位是计算其他列的结果?
EN

Stack Overflow用户
提问于 2014-07-15 15:32:03
回答 3查看 1.1K关注 0票数 1

我正在使用Netezza来操纵一些数据。我试图向表中添加一个列,该表的值是计算其他列的结果。

首先,我运行这个sql来创建一个表来重新排列其他表的顺序:

代码语言:javascript
复制
CREATE TABLE SEQ_6_3_FNN_CID218_ORDERED AS
SELECT A.* FROM SEQ_6_3_FNN_CID218 A
ORDER BY TIMESTAMP

然后,我需要的是这样的,假设列TMP和ATT1已经存在,我需要插入ATT2:

代码语言:javascript
复制
TMP ATT1 ATT2
1    1   NULL
2    4   4-1=3
3    5   5-4=1
4    8   8-5=3
5    9   9-8=1
6    12  12-9=3

实现这一目标的sql是什么?或者,是否有一种方法可以直接在SEQ_6_3_FNN_CID218上运行sql而不按顺序运行我的create表?

非常感谢你的帮助。仍然需要帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 14:11:43

你在这里寻找的经常被称为“计算列”。Netezza没有实现此特性,也没有实现触发器(另一种可能实现相同结果的方法)。由于Netezza专注于数据仓库,所以您所讨论的计算类型通常是在ETL过程中通过ETL工具完成的。

好消息是,您可以完全通过SQL来完成这一任务,而滞后函数正是为此而设计的。然后,如果您愿意,您可以在视图中对其进行编码。

代码语言:javascript
复制
TESTDB.ADMIN(ADMIN)=> insert into base_table select * from base_ext;
INSERT 0 6
TESTDB.ADMIN(ADMIN)=> select * from base_table order by col1;
 COL1 | COL2
------+------
    1 |    1
    2 |    4
    3 |    5
    4 |    8
    5 |    9
    6 |   12
(6 rows)

TESTDB.ADMIN(ADMIN)=> select col1, col2, col2 - lag(col2,1,NULL) over (
TESTDB.ADMIN(ADMIN)(> order by col1 asc) col3 from base_table;
 COL1 | COL2 | COL3
------+------+------
    1 |    1 |
    2 |    4 |    3
    3 |    5 |    1
    4 |    8 |    3
    5 |    9 |    1
    6 |   12 |    3
(6 rows)

为了清晰起见,SQL同样是:

代码语言:javascript
复制
select col1, col2, col2 - lag(col2,1,NULL) over ( order by col1 asc) col3 from base_table;
票数 2
EN

Stack Overflow用户

发布于 2014-07-15 15:33:34

Server“本机”无法做到这一点,但您可以使用一个insert和update触发器来响应对这两列的更改并更新第三列。

编辑--我被纠正了: Server可以在本地完成这一任务。请看阿姆·因尼扎·凯萨瓦兹的答案。

票数 1
EN

Stack Overflow用户

发布于 2014-07-15 15:42:00

代码语言:javascript
复制
Alter table SEQ_6_3_FNN_CID218_ORDERED
Add att2 as (att1-tmp)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24762297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档