SQL查询,以便在可能的情况下,仅在运行查询时添加列并使用值对其进行popluate

SQL查询,以便在可能的情况下,仅在运行查询时添加列并使用值对其进行popluate,sql,oracle,Sql,Oracle,在编写查询时,我需要一些帮助。所以我有一个表“Society”,它有以下列Id、Firstname、Lastname。它由多行填充,其中一些行具有相同的lastname,另一些行具有不同的lastname。因此,如何编写一个查询,只使用一个查询在同一个表中添加一个新列,比如新列的名称是Status,所有具有公共lastname的行的Status值为“FAMILY”,而具有不同lastname的行的Status值为“SINGLE”。我是sql行业的新手,这是我的家庭作业。因此,感谢所有有用的回复。

在编写查询时,我需要一些帮助。所以我有一个表“Society”,它有以下列Id、Firstname、Lastname。它由多行填充,其中一些行具有相同的lastname,另一些行具有不同的lastname。因此,如何编写一个查询,只使用一个查询在同一个表中添加一个新列,比如新列的名称是Status,所有具有公共lastname的行的Status值为“FAMILY”,而具有不同lastname的行的Status值为“SINGLE”。我是sql行业的新手,这是我的家庭作业。因此,感谢所有有用的回复。 感谢

一个表(没有任何约束)和一些示例行:

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> 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>
一个表(没有任何约束)和一些示例行:

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

你应该在你的问题中加入一些尝试,特别是如果这是家庭作业的话。我没有在这方面做出任何正确的尝试,因为我是这方面的新手。我刚刚创建了一个表,不知道如何从那里开始?您至少应该发布示例,说明您拥有哪些数据,以及您对这些数据的预期结果。为表结构和数据提供SQL命令。如果您能为您的案例提供一个sql查询,那将是最好的。听起来您并不是在试图向表中添加列,而是在查询的输出中添加一个与表本身不同的列?我希望我能在这里为您提供一个sql查询,Kaushik,但是请记住,在S.O中,如果您似乎没有尝试解决您的问题,我们许多人认为这不值得回答。所以,至少向我们展示一些尝试,以证明你认真考虑你的家庭作业。你应该在你的问题中包括一些尝试,特别是如果这是家庭作业。我没有做任何正确的尝试,因为我是新手。我刚刚创建了一个表,不知道如何从那里开始?您至少应该发布示例,说明您拥有哪些数据,以及您对这些数据的预期结果。为表结构和数据提供SQL命令。如果您能为您的案例提供一个sql查询,那将是最好的。听起来您并不是在试图向表中添加列,而是在查询的输出中添加一个与表本身不同的列?我希望我能在这里为您提供一个sql查询,Kaushik,但是请记住,在S.O中,如果您似乎没有尝试解决您的问题,我们许多人认为这不值得回答。所以,至少向我们展示一些尝试,证明你认真考虑你的家庭作业。很抱歉,我应该给你们提供一些蓝图或者我在这方面的尝试。好吧,我的桌子“社会”是这样的:对不起,我应该给你们提供一些蓝图或者我在这方面所做的尝试。好的,我的表“社会”是这样的: