2011-08-16 52 views
0

我有幾個ms訪問表,我需要壓縮,因爲數據庫中的字段太多。目前有哪些是沿着線的東西:在MSAccess中合併數據行

ID  Class  Date  
123 101  1/1/1111 
123 202  2/2/2222 
123 303  3/3/3333 
456 111  4/4/4444 
456 222  5/5/5555 
456 333  6/6/6666 

我需要的表看起來像是這樣的:

ID  Class(1) Date(1) Class(2) Date(2) Class(3) Class(3) ..... etc 
123 101  1/1/1111 202   2/2/2222 303   3/3/3333 ..... etc 
456 111  4/4/4444 222   5/5/5555 333   6/6/6666 ..... etc 

有沒有一個標準的編號由ID項和一些數據可能會重複。有沒有辦法做到這一點?

謝謝你的迴應。

+0

查看['TRANSFORM..PIVOT'語句](http://msdn.microsoft.com/zh-cn/library/bb208956(v = office.12).aspx)。 – onedaywhen

回答

1

我覺得你有例子向後(你有什麼,你需要什麼)。

對這種數據的適當的表的格式將是垂直(如您第一實例),而不是水平的。 (如果您想水平顯示,你能做到這一點通過,以用於演示查詢 - 但該表不應實際構建這樣)

要轉換水平格式,一種方式是這樣的:

INSERT INTO myNewTable 
(ID, class, date) 

SELECT 
    ID, 
    Class(1), 
    Date(1) 
FROM 
    myOldTable 
WHERE 
    Class(1) IS NOT NULL 

UNION 

(ID, class, date) 
SELECT 
    ID, 
    Class(2), 
    Date(2) 
FROM 
    myOldTable 
WHERE 
    Class(2) IS NOT NULL 

UNION 

... 
+0

不幸的是,我正在爲我去的大學的教授寫這篇文章。他們的表格應該是這樣,但出於某種原因,他們希望它成爲不應該的方式。你知道一種做他們想做的事的方法嗎? – user897308

+0

您的教授是否希望您以某種特定方式(DAO,ADO,SQL等;查詢,報告等)執行此操作? – Chains

+0

沒有。她只是想要完成。雖然這些文件是MS Access的。 – user897308

1

我給你的我怎麼可能處理這個問題......這不是辦法的abstractible /可重複使用的函數類型的想法 - 只是一個實用的,善良得-IT-完成的東西。

0)複製你的舊錶進行備份。

1)給你的原始表一個唯一的記錄標識符。在名爲'pk'的表格設計中添加一列,點擊小鍵盤按鈕。確保在保存後使用自動遞增的整數填充它。

2)創建新表,與列:PK,ID,類class1,DATE1,Class2中,DATE2,...,classn,回到名單Daten。你可以做一個

select id, count(class) from table order by count(class) desc. 

快速看看你需要創建多少個字段。

2)做插入#1

Insert into newtable (pk, id, class1, date1) 
select min(pk) id, class, date from oldtable 

3)不刪除#1

Delete from oldtable 
where pk in(select pk from newtable) 

4)做更新#1

Update newtable a 
set a.pk = b.pk, a.class2 = b.class, a.date2 = b.date 
FROM (select min(pk) pk, id, class, date from oldtable) b 

5)做刪除#2(重複步驟3)

6)不更新#2(重複步驟4,但將2改爲3)。 I.e .:

Update newtable a 
set a.pk = b.pk, a.class3 = b.class, a.date3 = b.date 
FROM (select min(pk) pk, id, class, date from oldtable) b 

...依此類推,直到舊錶中沒有剩餘記錄爲止。

就像我說的 - 這不是重複使用,必須修改它的每一個迴路等,如果你知道如何使用ADO記錄集,等等,你可以轉換成一些更抽象/重本 - 可用,但聽起來你不會多次使用它。

祝你好運。

+0

順便說一句 - 你可以在完成後刪除新表中的pk列。它只是幫助您從舊錶中刪除。之後,你將不需要它。 – Chains