6

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

工人                              技术员

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

4 回答 4

11

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

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

请记住,使用联合时,两个查询的列数必须相等

于 2011-11-06T18:05:19.390 回答
7

假设你的桌子被命名为“员工”,你可以做这样的事情。

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

不过,也许您需要重新审视您的设计。添加第三列不适合您,因为前两列代表两行。事实上,工人和技术人员之间似乎已经存在一种强制关系——他们似乎无缘无故地捆绑在同一个记录中。

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

于 2011-11-06T18:16:00.453 回答
1

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

于 2011-11-06T18:21:43.937 回答
1

我也不完全理解你想做什么(主要是因为:如果说,如果一行在Workers中有“Andy”,在Technicians中有“Kevin” ,你会在Employees中放什么?Andy还是Kevin?),但是要向表中添加一个新列,然后用您需要的数据填充它:

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

    更改表 [表] 添加 [员工] nvarchar(100) null

  2. 填充:

    更新 [Table] 设置 [Employees] = [Workers]

    - 或者:

    更新 [Table] 设置 [Employees] = [Technicians]

我相信你真正想要的是一张新表,员工,并将工人技术人员转变为从中提取的关系。为此,请参阅 Simon 为您提供的有关数据库规范化的链接。

于 2011-11-06T19:03:44.490 回答