SQL:如何正确存储外部Excel文档源中的数据?

时间:2012-01-09 19:06:47

标签: sql-server-2008 excel normalization

我正在使用SQL Server 2008,我正在使用导入向导导入数据。

我有来自excel文件的数据,如下所示......

SessionID       Email     SubmitTime      Question1     Question2    Question3 
----------      -----     -----------     ---------     ---------    ----------
54535212        a@b.com   12/21/2011      Yes           No           Yes
54532342        c@d.com   12/22/2011      Yes           Yes          Yes
54535288        e@f.com   12/23/2011      No            No           Yes
54532399        g@h.com   12/24/2011      No            Yes          Yes

现在我想将它存储在我的数据库中,以便我可以轻松访问数据。我想我应该制作Users TableQuestions TableAnswers TableSubmitted Table。出于我的目的,提交的表可以成为用户表的列。

User
`Email`
`Submitted`
`SessionID`

Question
`Question1`
`Question2`
`Question3`

Answer
`Email`
`Question`
`Answer`

如何使用Excel文档中的查询填充答案表?或者导入时从Excel文档创建的初始表?这似乎是一个简单的问题,但解决方案是出于某种原因让我不知所措。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您的数据结构有点搞砸了。如果您有Question1Question3的三列,那么您需要一个SurveyID列或类似的内容来标识唯一的组合。然后,您的答案表将包含UserIDSurveyIDAnswer1Answer2Answer3列。

如果您的Question表格中有一个Question列和一个QuestionID列(希望是identity列,那么它会自动递增,那么您可以执行以下操作:填充Answer表中的Import表:

insert into answer (userid, questionid, answer)
select
    u.userid,
    q.questionid,
    case
        when q.question = 'Question1' then i.question1
        when q.question = 'Question2' then i.question2
        when q.question = 'Question3' then i.question3
        else null
    end as answer
from
    import i
    inner join users u on
        i.email = u.email
    cross join question q