将多个列组合到新表中的单个列中

时间:2012-05-21 19:34:13

标签: sql ms-access ms-access-2007

我有一个名为Master的Access 2007表,其中包含以下几列:

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. 有两个Sue评论栏;这些不应该连接在一起,而是为每个条目添加一个单独的行。
  2. 除了一个例外,“名称”列的值位于“主列”的名称中
  3. 例外是CSE评论和CSE名称
  4. UID是Master表的外键
  5. 跳过任何空白的评论字段,其中有很多。
  6. 正如你所看到的,我正试图在一张大桌子上应用一点规范化。

    TIA!

1 个答案:

答案 0 :(得分:2)

这显然是一次性操作,因此无需在一次查询中执行此操作。
这意味着它实际上非常简单,因为您可以为每个值构建单独的查询,然后逐个执行。

基本模式如下所示(对于Team Comments列)。

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

(请注意,我假设CommentID是一个自动值字段,因此我根本不需要处理它)

对于两个Sue Comments列,您只需连续执行两个类似的查询:

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”列...我理解Name列的CSE Comments不像其他示例那样是固定的,但应该从{{1}中获取而是列 正确?如果是,则查询需要如下所示:

CSE Name