2013-02-08 62 views
-1

我試圖規範化我的數據,因爲它是從Excel工作表中輸入的。我提取數據的文件有多個列sibling1_name,sibling1_age,sibling1_affected等,最多有4個兄弟姐妹,4個孩子,4個親戚等等。我想將它們全部輸入到一個名稱,年齡,受影響和關係的新表中。我找到了一種方法來正確輸入第一個兄弟(見下文),但我不確定如何添加其他人。任何建議?結合多個SELECT功能,其中兩個都有一個WHERE

INSERT INTO Family 
      (ID, 
      Name, 
      Age, 
      Affected, 
      Relationship) 
SELECT ExcelPatients.id, 
     ExcelPatients.sibling1_name  AS Name, 
     ExcelPatients.sibling1_age  AS Age, 
     ExcelPatients.sibling1_affected AS Affected, 
     "Sibling" 
FROM ExcelPatients 
WHERE (((ExcelPatients.Sibling1_name) IS NOT NULL)) 
     AND ExcelPatients.id NOT IN (SELECT DISTINCT ID AND Name 
            FROM Family); 
+1

這是什麼樣的SQL?並且「ExcelPatients」是該SQL數據庫中的一個表格? – RBarryYoung 2013-02-08 18:12:19

+1

這是你的實際代碼?如果是這樣,它的工作? 'SELECT DISTINCT ID和姓名從家庭'似乎很奇怪。 – 2013-02-08 18:14:41

+0

是的,這是它從中拉出的桌子。所有數據都從Excel工作表中導入到表格中,並在該工作表中,它位於那些列表中,我提到了 – leeer 2013-02-08 18:14:50

回答

1
INSERT INTO Family 
      (ID, 
      Name, 
      Age, 
      Affected, 
      Relationship) 

SELECoT ExcelPatients.id, ExcelPatients.sibling1_name AS Name, 
ExcelPatients.sibling1_age AS Age, 
ExcelPatients.sibling1_affected AS Affected, "Sibling" 
FROM ExcelPatients 
WHERE (((ExcelPatients.Sibling1_name) Is Not Null)) 
AND NOT EXISTS (SELECT DISTINCT ID FROM Family where family.id = ExcelPatients.id and Family.name = ExcelPatients.sibling1_name) 

UNION 

SELECT ExcelPatients.id, ExcelPatients.sibling2_name AS Name, 
ExcelPatients.sibling2_age AS Age, 
ExcelPatients.sibling2_affected AS Affected, "Sibling" 
FROM ExcelPatients 
WHERE (((ExcelPatients.Sibling2_name) Is Not Null)) 
AND NOT EXISTS (SELECT DISTINCT ID FROM Family where family.id = ExcelPatients.id and Family.name = ExcelPatients.sibling2_name) 

UNION 

SELECT ExcelPatients.id, ExcelPatients.sibling3_name AS Name, 
ExcelPatients.sibling3_age AS Age, 
ExcelPatients.sibling3_affected AS Affected, "Sibling" 
FROM ExcelPatients 
WHERE (((ExcelPatients.Sibling3_name) Is Not Null)) 
AND NOT EXISTS (SELECT DISTINCT ID FROM Family where family.id = ExcelPatients.id and Family.name = ExcelPatients.sibling3_name) 

UNION 

SELECT ExcelPatients.id, ExcelPatients.sibling4_name AS Name, 
ExcelPatients.sibling4_age AS Age, 
ExcelPatients.sibling4_affected AS Affected, "Sibling" 
FROM ExcelPatients 
WHERE (((ExcelPatients.Sibling4_name) Is Not Null)) 
AND NOT EXISTS (SELECT DISTINCT ID FROM Family where family.id = ExcelPatients.id and Family.name = ExcelPatients.sibling4_name) 

在沒有看到數據,我不知道,如果UNION ALL或聯合是正確的選擇。如果一個名字只能在四個兄弟列中的一箇中,那麼使用UNION ALL,如果它可以重複,則使用UNION。由於您正在清理其他來源的數據,UNION可能會更安全但速度更慢。不存在往往是SQL Server中最快的比較,這就是我選擇它的原因。

+0

非常感謝!我認爲這是完美的工作! – leeer 2013-02-08 18:55:39

+0

還有一個問題,有什麼方法可以將所有這些數據輸入到現有的表格中? – leeer 2013-02-08 19:01:22

+0

將插入物添加到頂部的東西 – HLGEM 2013-02-08 19:32:33

相關問題