2013-05-08 4 views
0

У меня есть один таблица А и содержит значениеКак сохранить результаты в таблице?

NAME  AGE 
Loga  18 
Anitha 20 
Saranya 13 

Я был тест табличных значения, как при выполнении условия, используя саз случая, когда возраст> = 18, то «основные» еще «мелкие» то результатов есть

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

Я хочу добавить 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

+0

@IMSoP Да, исправлено, спасибо. –

0

Вам нужно будет сначала добавить столбец как NULLABLE с помощью ALTER TABLE ... ADD COLUMN, а затем заполнить его для всех существующих значений; Вы, вероятно, то нужно установить его ненулевое:

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 и новый столбец всегда должен держать, вы можете захотеть взглянуть на что-то более сложное:

  • проверочное ограничение заставляет все строки, чтобы соответствовать условию
  • триггер автоматически обновляемой новый столбец, когда возраст вставлен или изменен.
  • с использованием вида или функции для захвата логики /'minor' в одном месте, но не с избыточным хранением на самом столе
+0

Кто-нибудь хочет объяснить нижний план? Вопрос помечен как PostgreSQL, и это самый эффективный способ добиться того же результата, что и другие ответы. Я также добавил некоторые замечания о дальнейших вещах, которые следует учитывать. – IMSoP

+0

Я давно не задавался вопросом о драйвах с понижением. Просто игнорируйте их, если они не объяснят. –

+1

А, мой плохой, кажется, что «ИСПОЛЬЗОВАНИЕ» не может быть таким, как в конце концов; возможно, именно поэтому нижний план. Я отредактирую свой ответ. – IMSoP