6

テーブルには Workers - Technicians と呼ばれる 2 つの列があります。労働者には労働者の名前があり、技術者には会社で働いている技術者の名前があります。これがどのように見えるかです:

労働者                              の技術者

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

ただし、デザインをもう一度検討する必要があるかもしれません。最初の 2 つの列は 2 つの行を表すため、3 番目の列を追加してもうまくいきません。実際、労働者と技術者の間にはすでに強制的な関係があるように見えます-彼らは特別な理由もなく同じ記録にまとめられているようです.

行ごとに 1 人の従業員を含む Employee テーブルで新たに開始し、既存のテーブルを破棄することを検討してください。要件が単純な場合はそのテーブルで従業員属性を維持でき、より複雑な場合は別の属性テーブルに結合できます。どちらの場合でも、データを正規化すると作業が楽になり、ユニオンを使用して列を結合する必要がなくなります。

于 2011-11-06T18:16:00.453 に答える
1

私はあなたの質問を完全には理解していませんが、追加の列を追加したくありません。これにより、(より多くの) データの冗長性が導入され、将来の更新やクエリがより困難になります。指定された SELECT クエリ ソリューションのいずれかを使用し、既存の 2 つの個別の列を 1 つの列にリファクタリングすることを真剣に検討してください。まだ概念に慣れていない場合は、データベースの正規化を検討することをお勧めします。

于 2011-11-06T18:21:43.937 に答える
1

また、あなたが何をしたいのか完全には理解できません (主にこれが原因です: たとえば、行にWorkersに "Andy" があり、 Techniciansに"Kevin"がある場合、 Employeesに何を入れますか? AndyまたはKevin?)、ただし、テーブルに新しい列を追加してからデータを入力するには、次のことが必要です。

  1. それを追加します (テーブルの名前が Table で、新しい列には 100 文字で十分であると仮定します):

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

  2. 記入してください:

    update [Table] set [Employees] = [Workers]

    - また:

    update [テーブル] set [従業員] = [技術者]

あなたが本当に必要としているのは、新しいテーブルである Employees であり、WorkersTechniciansをそこから引き出される関係に変更することだと思います。そのためには、データベースの正規化について Simon が提供したリンクを参照してください。

于 2011-11-06T19:03:44.490 に答える