2011-11-06 77 views
2

我的表中有两列叫做Workers - Technicians。在工人中,我有工人的名字,在技术人员中,我有在公司工作的技术员的名字。下面是它的外观:如何将两列添加到SQL中的一列中?

工人                                                         名技术员

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

我不想创建另一个表,我只是想添加一个新列。我将如何做到这一点?

回答

1

我还没有完全明白你想要做的(主要是因为这是什么:如果说,一列工人和“凯文”中技术员有“刘德华”,你会怎么放员工?Andy or Kevin?),但一个新的列添加到表,然后用数据填充它,你需要:

  1. 添加它(假设你的表名为表和100个字符足以让新列):

    ALTER TABLE [表]添加[雇员] nvarchar的(100)零

  2. 填充它:

    更新[表]中的[员工] = [工人]

    - 或:

    更新[表]中的[员工] = [技术员]

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

7

工会声明应该在这里完成这项工作。事情是这样的:

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

请记住,这两个查询使用联盟

+0

select不会添加新列,我错了吗? – LuckySlevin

+0

更正确'SELECT工作人员从表UNION SELECT技术人员从表' – Sklivvz

+1

@Sklivvz是的这是正确的,但是,我希望这在存储在我的表中的列,而不仅仅是一个表达式。 – LuckySlevin

4

假设你的表被命名为“员工”时,必须有平等的列数,你可以做这样的事情。

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

虽然你可能需要再看看你的设计。添加第三列对您而言不会奏效,因为前两列代表两行。事实上,工人和技术人员之间似乎已经存在强制关系 - 他们似乎被捆绑在一起,没有特别的理由。

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

+3

'union'已经'distinct'(为了避免行为一个使用'union all') – Sklivvz

+0

谢谢@Sklivvz,它教会了我新的东西:)。 – phatfingers

1

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

+0

其实我想添加一个额外的列,因为我将来需要这个列。 – LuckySlevin

相关问题