如何在SQL中将两列附加到一列?

时间:2011-11-06 18:03:26

标签: sql sql-server sql-update sql-insert

我的表中有两列名为Workers - Technicians。在工人我有工人的名字,在技术员,我有在公司工作的技术人员的名字。以下是它的外观:

工人 技术人员

Andy                  Kevin
Conan                 Jason
Jay                   Ray
Donald                Daryl
Martin                .
Mark                  .(rows goes on)
.
.(rows goes on)       

我想要做的是附加这些行并有一个名为Employees的列。这就是我想要的:

员工

Andy                  
Conan                 
Jay                   
Donald               
Martin                
Mark
Kevin
Jason
Ray
Daryl
.
.

我不想创建另一个表,我只想添加一个新列。我该怎么做?

4 个答案:

答案 0 :(得分:8)

工会声明应该在这里完成工作。像这样:

 select Name from Workers-Technitians where Worker not null
 UNION 
 select Name from Workers-Technitians where Technitian not null

请记住,使用联合

时,两个查询的列数必须相等

答案 1 :(得分:4)

假设您的表名为“staff”,您可以这样做。

select distinct employees from (
  select workers as employees from staff s1
  union select technicians as employees from staff s2
) as emps

或许你需要再看一下你的设计。添加第三列将无法解决问题,因为前两列代表两行。事实上,工人和技术人员之间似乎已经存在被迫的关系 - 他们似乎没有特别的原因捆绑在同一个记录中。

考虑使用Employee表重新开始,每行一名员工,并放弃现有表。如果要求很简单,您可以在该表中维护员工属性,或者为更复杂的案例加入单独的属性表。在任何一种情况下,规范化数据都会使您的生活更轻松,并且不需要使用联合来连接列。

答案 2 :(得分:1)

我并不完全理解您的问题,但您不想添加其他列,这会引入(更多)数据冗余,并且会使将来的更新或查询更加困难。使用给定的SELECT查询解决方案之一,并认真考虑将两个现有的单独列重新分解为单个列。如果你还不熟悉这个概念,我建议你看一下database normalisation

答案 3 :(得分:1)

我也完全不明白你想做什么(主要是因为这个:例如,如果一行在 Workers 中有“Andy”而在 Technicians <中有“Kevin” / em>,您将在员工中添加什么?Andy Kevin?),但要向表中添加新列,然后使用您需要的数据填充:

  1. 添加它(假设您的表名为Table,100个字符足以容纳新列):

      

    alter table [Table] add [Employees] nvarchar(100)null

  2. 填写:

      

    更新[表]设置[员工] = [工人]

         

    - 或:

         

    更新[表]设置[员工] = [技术人员]

  3. 我相信你真正想要的是一个新表,Employees,并将 Workers Technicians 更改为从中获取的关系。为此,请参阅Simon提供的有关数据库规范化的链接。