Таблица (без ограничений) и несколько строк с примерами:
SQL> create table society
2 (id number,
3 firstname varchar2(20),
4 lastname varchar2(20)
5 );
Table created.
SQL> insert into society (id, firstname, lastname)
2 select 1, 'Little', 'Foot' from dual union
3 select 2, 'Big' , 'Foot' from dual union
4 select 3, 'Mickey', 'Mouse' from dual union
5 select 4, 'Minnie', 'Mouse' from dual union
6 select 5, 'Chris' , 'Rea' from dual union
7 select 6, 'Katie' , 'Melua' from dual;
6 rows created.
SQL> select * From society order by id;
ID FIRSTNAME LASTNAME
---------- -------------------- --------------------
1 Little Foot
2 Big Foot
3 Mickey Mouse
4 Minnie Mouse
5 Chris Rea
6 Katie Melua
6 rows selected.
SQL>
Чтобы добавить другой столбец, используйте команду ALTER TABLE:
SQL> alter table society add status varchar2(10);
Table altered.
Наконец, обновите добавленный столбец. Простой запрос, основанный на подсчете количества одинаковых фамилий. Все фамилии, чей счет больше 1, являются «семьей» (в то время как остальные «одиночные»):
SQL> select lastname, count(*) cnt
2 from society
3 group by lastname;
LASTNAME CNT
-------------------- ----------
Foot 2 --> family
Rea 1 --> single
Melua 1 --> single
Mouse 2 --> family
SQL>
Используя вышеописанное SELECT
, выполнить обновление; CASE
решит, какой статус применить:
SQL> update society s set
2 s.status = (select case when x.cnt > 1 then 'FAMILY'
3 else 'SINGLE'
4 end
5 from (select s1.lastname, count(*) cnt
6 from society s1
7 group by s1.lastname
8 ) x
9 where x.lastname = s.lastname
10 );
6 rows updated.
SQL> select * from society order by id;
ID FIRSTNAME LASTNAME STATUS
---------- -------------------- -------------------- ----------
1 Little Foot FAMILY
2 Big Foot FAMILY
3 Mickey Mouse FAMILY
4 Minnie Mouse FAMILY
5 Chris Rea SINGLE
6 Katie Melua SINGLE
6 rows selected.
SQL>