如何将结果存储在表中?

时间:2013-05-08 11:46:32

标签: postgresql rdbms

我有一张表A,其中包含值

NAME     AGE
Loga     18
Anitha   20
Saranya  13

我正在测试表值,如果条件使用case语句情况,当AGE> = 18然后'major'  否则'小'然后结果是

NAME     AGE  CASE
Loga     18  'major'  
Anitha   20  'major'
Saranya  13  'minor'

我想在A表中添加CASE和结果值。它有可能吗?

2 个答案:

答案 0 :(得分:2)

alter table a add column new_column_name text;

update a
set new_column_name = case when age >= 18 then 'major' else 'minor' end

答案 1 :(得分:0)

您需要先使用ALTER TABLE ... ADD COLUMN将列添加为NULLable,然后为所有现有值填充该列;您可能希望将其设置为不可为空:

ALTER TABLE a ADD COLUMN new_column text NULL;
UPDATE a SET new_column = CASE WHEN age >= 18 THEN 'major' ELSE 'minor' END;
ALTER TABLE a ALTER COLUMN new_column SET NOT NULL;

这将填充初始值,并强制要求为新值填充列,但不会反映任何更改(因此您可以将age更新为超过18,但保留标签为'minor')。

如果age与新列之间的关系始终存在,您可能需要考虑更复杂的事情:

  • 强制所有行匹配条件的检查约束
  • 在插入或更改年龄时自动更新新列的触发器
  • 使用视图或函数在一个地方捕获'major' / 'minor'逻辑,但不将其冗余地存储在表本身上