2009-11-09 37 views
0

我有大約20個包含數據的excel文件。所有的表都有相同的列,如ID名稱年齡位置等.....每個文件都有不同的數據,但我不知道一個文件中的數據是否在另一個文件中再次重複。所以我想加入所有的文件,並且結果st應該包含不同的值。請儘快幫我解決這個問題。我希望結果集存儲在訪問數據庫中。如何加入兩個或多個表格和具有所有不同值的結果集

回答

0

在SQL中,可以使用JOIN或NATURAL JOIN來連接表。我會研究NATURAL JOIN,因爲你說所有的表都有相同的值。

之後,您可以使用DISTINCT獲取不同的值。

雖然我不確定這是不是你想要的東西:你的問題是關於excel的問題,但是你用SQL標記了它。

1

我會推薦鏈接在acces牀單,或導入牀單作爲tabels。

然後從那裏嘗試使用DISTINCT確定從表格/工作表中選擇需要的鍵,並且只根據需要選擇記錄。

+0

感謝您的答覆,但我在看的是我想要從兩個文件中的所有數據不重複。我的意思是 ID名稱LOC 1高保真 2 B胡 3 c。通過 ID名稱LOC 1 d XY 2 B胡 3小時BJ 我想 ID名稱LOC 1一喜 2 b胡 3 c。通過 4 d XY 5小時BJ – abhi 2009-11-09 22:21:21

0

如果你可以使用一個查詢所有的表,你可以使用一個union來獲得不同的行:

select id, name, age, location from Table1 
union 
select id, name, age, location from Table2 
union 
select id, name, age, location from Table3 
union 
... 

您可以直接從結果插入記錄:

insert into ResultTable 
select id, name, age, location from Table1 
union 
.... 

如果您一次只能從一個表格中進行選擇,則可以跳過插入已在表格中的行:

insert into ResultTable 
select t.id, t.name, t.age, t.location from Table1 as t 
left join ResultTable as r on r.id = t.id 
where r.id is null 

(假設ID是一個獨特的字段,識別記錄。)

+0

嗨,大家好感謝您的支持,但是這是我有 問題,我有20個Excel文件。每個文件都包含不同的數據,所以如果我們在表上做任何操作,就沒有問題了。但是,如果我嘗試做工會與其他表則顯示出這樣的 ID名稱的位置等等等等.... 1 XYZ BHU 1個ABC HUD 2 BHK – abhi 2009-11-09 22:16:28

+0

感謝您的答覆,但我在尋找什麼是我想要來自兩個文件的所有數據都沒有重複。我的意思是 ID名稱LOC 1高保真 2 B胡 3 c。通過 ID名稱LOC 1 d XY 2 B胡 3小時BJ 我想 ID名稱LOC 1一喜 2 b hu 3 c作者: 4天xy 5小時bj – abhi 2009-11-09 22:38:53

+0

如果我理解你是正確的(在多次閱讀你的評論之後),你應該完全省略Excel文件中的id,以便記錄在剩下的數據,並在Access數據庫中有一個計數器字段,用於創建新的id:s當你添加它們時。 – Guffa 2009-11-10 00:00:07

0

看來你想要的唯一一組數據是這樣的:

SELECT T1.name, T1.loc 
    FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
     ].[Sheet1$] AS T1 
UNION 
SELECT T1.name, T1.loc 
    FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
     ].[Sheet1$] AS T1 

...但你那麼想任意應用整數序列爲id(而不是使用Excel表中的id值)。

由於Access數據庫引擎不支持通用表表達式和Excel不支持VIEW S,你將不得不重複UNION查詢作爲派生表(希望優化器將識別重複?)例如使用相關子查詢來獲得行號:

SELECT (
     SELECT COUNT(*) + 1 
      FROM (
       SELECT T1.name, T1.loc 
        FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
         ].[Sheet1$] AS T1 
       UNION 
       SELECT T1.name, T1.loc 
        FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
         ].[Sheet1$] AS T1 
       ) AS DT1 
     WHERE DT1.name < DT2.name 
     ) AS id, 
     DT2.name, DT2.loc 
    FROM (
     SELECT T2.name, T2.loc 
      FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db1.xls; 
       ].[Sheet1$] AS T2 
     UNION 
     SELECT T2.name, T2.loc 
      FROM [Excel 8.0;HDR=YES;IMEX=1;DATABASE=C:\db2.xls; 
       ].[Sheet1$] AS T2 
     ) AS DT2; 

注:

我想要的結果集存儲在 訪問數據庫

那麼也許你應該遷移Excel數據放入Access數據庫中的臨時表中,並從那裏進行數據清理。至少你可以把派生表放入一個VIEW :)

+0

我認爲這個答案是有誤導性的,這個問題意味着WHOLE行可能在多個文件中 - 包括ID,爲什麼他需要申請新的身份證號碼! – HarveyFrench 2015-09-03 10:15:36

0

聯接是通過匹配相應列中的值來組合兩個表。結果,你將得到一個由第一個表格組成的合併表格,再加上從第二個表格複製的匹配行。您可以使用DIGBD加載項爲Excel

相關問題