2012-01-09 58 views
1

我正在使用SQL Server 2008,我正在使用導入嚮導導入數據。SQL:如何正確存儲來自外部Excel文檔源的數據?

我有一個從Excel數據文件中像下面...

SessionID  Email  SubmitTime  Question1  Question2 Question3 
----------  -----  -----------  ---------  --------- ---------- 
54535212  [email protected] 12/21/2011  Yes   No   Yes 
54532342  [email protected] 12/22/2011  Yes   Yes   Yes 
54535288  [email protected] 12/23/2011  No   No   Yes 
54532399  [email protected] 12/24/2011  No   Yes   Yes 

現在我想將其存儲在我的數據庫,所以我可以很容易地訪問數據。我想我應該做一個Users Table,Questions Table,Answers Table,Submitted Table。爲了我的目的,提交的表格可以成爲用戶表格的一列。

User 
`Email` 
`Submitted` 
`SessionID` 

Question 
`Question1` 
`Question2` 
`Question3` 

Answer 
`Email` 
`Question` 
`Answer` 

如何使用Excel文檔中的查詢填充答案表?或者從Excel文檔導入創建的初始表?這似乎是一個簡單的問題,但解決方法是由於某種原因逃避我。謝謝你的幫助!

回答

1

你的數據結構有點搞砸了。如果您有三列Question1Question3,那麼您需要一個SurveyID列或類似的東西來標識唯一的組合。然後,您的答案表將有UserID,SurveyID,Answer1,Answer2Answer3列。

如果您Question表中有一個Question列和QuestionID列(希望一個identity列,因此自動遞增,那麼你會做這樣的事情,從你的Import表填充Answer表:

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 
+0

我現在正在通過你的回答...我不知道它是否重要,但我有〜50個問題,我只舉了3個例子,遺憾忘了提到這個問題 – daveomcd 2012-01-09 19:19:04

+1

@daveomcd - 然後我想想問題表有兩列:QuestionID int identity(1,1)'和Question nvarchar(255)'是給你的。你可以使用第二個SQL語句。你只需要一個很長的'case' - 即使有'unpivot'語句也不會解決這個問題。我只寫一個生成'case'子句的快速腳本。 – Eric 2012-01-09 19:22:32

+0

與腳本的好主意感謝所有的建議,我現在要得到它現在感謝! – daveomcd 2012-01-09 19:24:45

相關問題