SQL查询,以便在可能的情况下,仅在运行查询时添加列并使用值对其进行popluate
在编写查询时,我需要一些帮助。所以我有一个表“Society”,它有以下列Id、Firstname、Lastname。它由多行填充,其中一些行具有相同的lastname,另一些行具有不同的lastname。因此,如何编写一个查询,只使用一个查询在同一个表中添加一个新列,比如新列的名称是Status,所有具有公共lastname的行的Status值为“FAMILY”,而具有不同lastname的行的Status值为“SINGLE”。我是sql行业的新手,这是我的家庭作业。因此,感谢所有有用的回复。 感谢一个表(没有任何约束)和一些示例行:SQL查询,以便在可能的情况下,仅在运行查询时添加列并使用值对其进行popluate,sql,oracle,Sql,Oracle,在编写查询时,我需要一些帮助。所以我有一个表“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中,如果您似乎没有尝试解决您的问题,我们许多人认为这不值得回答。所以,至少向我们展示一些尝试,证明你认真考虑你的家庭作业。很抱歉,我应该给你们提供一些蓝图或者我在这方面的尝试。好吧,我的桌子“社会”是这样的:对不起,我应该给你们提供一些蓝图或者我在这方面所做的尝试。好的,我的表“社会”是这样的: