SQL-запрос для добавления столбца и заполнения его значениями во время выполнения только запроса, если это возможно - PullRequest
0 голосов
/ 05 мая 2018

Мне нужна помощь при написании запроса. Итак, у меня есть таблица «Общество», в которой есть следующие столбцы: Идентификатор, Имя, Фамилия. И он заполняется несколькими строками, причем некоторые строки имеют одинаковую фамилию, а некоторые имеют различную фамилию. Итак, как написать запрос для добавления нового столбца в той же таблице, используя только запрос, скажем, имя нового столбца - Status, так что значение status для всех строк, имеющих общую фамилию как «FAMILY», и значение Status для строки, имеющие отличную фамилию как «ОДИН» Я новичок в этом бизнесе, это своего рода домашнее задание. Так что все полезные ответы приветствуются. Спасибо

1 Ответ

0 голосов
/ 06 мая 2018

Таблица (без ограничений) и несколько строк с примерами:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...