我的表中有两列名为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
.
.
我不想创建另一个表,我只想添加一个新列。我该怎么做?
答案 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?),但要向表中添加新列,然后使用您需要的数据填充:
添加它(假设您的表名为Table,100个字符足以容纳新列):
alter table [Table] add [Employees] nvarchar(100)null
填写:
更新[表]设置[员工] = [工人]
- 或:
更新[表]设置[员工] = [技术人员]
我相信你真正想要的是一个新表,Employees,并将 Workers 和 Technicians 更改为从中获取的关系。为此,请参阅Simon提供的有关数据库规范化的链接。