2013-05-08 127 views
0

我有一個表A和包含值如何將結果存儲在表中?

NAME  AGE 
Loga  18 
Anitha 20 
Saranya 13 

我測試表中的值,如果使用的情況下聲明的情況下條件時,AGE> = 18然後「主要」 別的「次要」然後將結果是像

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

我想在我的A表中添加CASE和永久結果的值。它有可能嗎?

回答

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 
+0

這個更新語句不必要的複雜 - 你只想'new_column_name = case when age> = 18 then'major'else'minor'end' – IMSoP 2013-05-08 12:03:08

+0

@IMSoP是的,更正了,謝謝。 – 2013-05-08 12:09:03

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和新列之間的關係必須始終堅持,你可能要考慮更復雜的東西:

  • 檢查約束迫使所有行
  • 觸發符合條件自動更新當插入或更改年齡時的新列
  • 使用視圖或函數在一個位置捕獲邏輯但不將其冗餘存儲在表本身
+0

任何人都在意解釋downvote?問題被標記爲PostgreSQL,這是實現與其他答案所建議的結果相同的最有效方式。我現在還添加了一些關於進一步考慮事項的註釋。 – IMSoP 2013-05-08 11:59:19

+0

我很久以前就放棄了對駕駛型downvotes的懷疑。如果他們不解釋,就忽略他們。 – 2013-05-08 12:03:48

+1

啊,我的壞處,似乎'USING'不能像那樣使用;也許這就是爲什麼downvote。我會編輯我的答案。 – IMSoP 2013-05-08 12:04:15

相關問題