1

私はMasterと呼ばれるAccess2007テーブルを持っています。このテーブルには、他の多くの列の中でも、次の列が含まれています。

Master.UID, 
Master.[Team Comments], 
Master.[Judy Comments], 
Master.[Sue Comments], 
Master.[Paul Comments], 
Master.[CSE Comments], 
Master.[CSE Name], 
Master.[Sue Comments1], 
Master.[David Comments] 

次のようなCommentsという新しいテーブルを作成したいと思います。

CommentID
UID
Name
Comment

ここにはいくつかの問題があります。

  1. 2つのスーコメント列があります。これらは連結する必要はありませんが、エントリごとに個別の行を配置する必要があります。
  2. 1つの例外を除いて、Name列の値はMaster列の名前にあります
  3. 例外はCSEコメントとCSE名です
  4. UIDは、マスターテーブルへの外部キーです。
  5. 多くの空白のコメントフィールドをスキップします。

ご覧のとおり、私は1つのcraaaaaazyの大きなテーブルにほんの少しの正規化を適用しようとしています。

TIA!

4

1 に答える 1

2

これは明らかに1回限りのアクションであるため、 1回のクエリでこれを行う必要はありません。
これは、値ごとに個別のクエリを作成して次々に実行できるため、実際には非常に簡単であることを意味します。

基本的なパターンは次のようになります(Team Comments列の場合)。

insert into comments (UID, Name, Comment)
select UID, 'Team', [Team Comments] from master where [Team Comments] is not null

(これは自動値フィールドであると想定しているCommentIDため、処理する必要はまったくないことに注意してください)

2つのSue Comments列については、2つの類似したクエリを1行で実行するだけです。

insert into comments (UID, Name, Comment)
select UID, 'Sue', [Sue Comments] from master where [Sue Comments] is not null

insert into comments (UID, Name, Comment)
select UID, 'Sue', [Sue Comments1] from master where [Sue Comments1] is not null

そして、「CSE」列の場合...他の例のように列のNameforがCSE Comments固定されていないことを理解しましたが、CSE Name代わりに列から取得する必要があります。
正しい?はいの場合、クエリは次のようになります。

insert into comments (UID, Name, Comment)
select UID, [CSE Name], [CSE Comments] from master where [CSE Comments] is not null
于 2012-05-21T20:14:38.463 に答える