如何將我的 Access 表上的每條記錄變成 6 條記錄?
我整天都在用Google搜尋一個問題:請幫忙。
我有一張像下面這樣的表格,我想擴展它,將每條記錄變成 6 條記錄。
TableName: -------------------------------------------------- | col1 | col2 | col3 | ------------------------------------------------- | A1 | abcd | | ------------------------------------------------- | B2 | efgh | | -------------------------------------------------- | C3 | ijk | | --------------------------------------------------
它最終應該看起來像這樣:
-------------------------------------------------- | col1 | col2 | col3 | ------------------------------------------------- | A1 | abcd | 1 | ------------------------------------------------- | A1 | abcd | 2 | ------------------------------------------------- | A1 | abcd | 3 | ------------------------------------------------- | B2 | efgh | 1 | -------------------------------------------------- | B2 | efgh | 2 | ------------------------------------------------- | B2 | efgh | 3 | ------------------------------------------------- | C3 | ijk | 1 | --------------------------------------------------
我不知道該怎麼做,因為我剛剛開始使用 Access。到目前為止,我已經製作了一個應該記錄的數據宏,對其進行編輯以在 col3 中添加資訊,然後再創建 5 個。像這樣
然後我讓這個宏從表的頂部開始,執行數據宏,然後轉到下一條記錄,直到所有 430 都展開:
當我去 TableName 並嘗試執行宏時,我得到
沒有執行操作的數據上下文。使用 RunDataMacro 操作執行呼叫 DeleteRecord 或 EditRecord 且未指定別名的數據宏可能會導致此錯誤。
我哪裡出錯了?
對這個問題的一個很好的答案可能是充分澄清這個問題,以便幾乎沒有訪問經驗的人 - 我 - 可以將它應用於這種略有不同的情況。
注意:在實施將列值複製到新行中的任何解決方案之前,請考慮正確規範化的表模式。規範化表消除了重複數據,並具有將多個錶鍊接在一起的適當主鍵和外鍵(而不是試圖將所有數據強製到一個表中)。將值複製並保存到表的多行中會讓人頭疼,因為必須使行保持同步,或者以後在應該包含相同值的行中遇到不匹配的數據。 在需要時使用適當的 JOIN 查詢,規範化表始終可以根據需要生成多行
生成擴展行的最佳方法是使用另一個(臨時)表。例如,創建一個名為
$$ TempTable $$具有以下值:
Col3 ---- 1 2 3
現在在兩個表之間做一個 CROSS JOIN。交叉連接產生兩個表中所有行的笛卡爾積。這意味著它返回每個表中所有可能的行組合。(訪問
$$ and I think for any other standard SQL relational database system $$預設行為是始終為不受其他 JOIN 約束的所有行生成笛卡爾積。)在 Access SQL 中,CROSS JOINS 是通過在不指定任何連接類型的情況下列出表來完成的——以逗號分隔的表列表:
SELECT DT.Col1, DT.Col2, TT.Col3 FROM DataTable As DT, TempTable As TT WHERE DT.Col3 Is NULL ORDER BY DT.Col1, DT.Col2, TT.Col3
該查詢將僅返回擴展的行集,但不會更新原始表。
如果您堅持將新行保存到原始表中,您可以使用基於前一個查詢的幾個更新查詢來做到這一點。
請注意,我添加了條件
WHERE DT.Col3 Is NULL
以避免重複已處理的行。
- 將先前列出的查詢另存為命名查詢,例如
[Expanded]
.- 添加新行以
[Col3] >= 2
使用以下 INSERT 命令:INSERT INTO DataTable ( Col1, Col2, Col3) SELECT Expanded.Col1, Expanded.Col2, Expanded.Col3 FROM Expanded WHERE Expanded.Col3 >= 2
1 -> [Col3]
使用以下 UPDATE 命令更新原始行:UPDATE DataTable SET DataTable.Col3 = 1 WHERE DataTable.Col3 Is Null;