2009-09-14 64 views
1

我有一個表在MS Access這樣的記錄:如何合併MS訪問中的行?

ID field2 field3 field4 field5 
1 345  asr 
2    ase  567 788 
3 456  ghy 
4    jki  568 899 
5 235  yui 
6    hju  456 456 

我要合併它得到像這樣的表:

ID  field2 field3 field4 field5 
1   345 asrase  567 788 
3   456 ghyjki  568 899 
5   235 yuihju  456 456 

這是可能的疑問?

+1

我們可以掀起一些東西。首先,我們需要同意規定兩個(或更多?)行將對結果表中的同一行產生貢獻的規則。 1)是屬於同一個表,由直接在最後一個帶有field2值的記錄之後缺少field2值_and_ ID而建立。 2)如果我們有多個field4或field5的值(例如,如果我們總共有3行輸入兩個field4值)? – mjv 2009-09-14 06:20:37

+0

截至目前爲止,我們可以安全地假設字段4和5只有一個值 – tksy 2009-09-14 06:32:04

回答

1

假設行繼續像例子中,這個查詢會做:

select a.id, 
    a.field2, 
    a.field3 + Iif(IsNull(b.field3),'',b.field3), 
    b.field4, 
    b.field5 
from table1 a 
left join table1 b on b.id = a.id + 1 
where a.field2 is not null 

它加入表本身,尋找下一行。它將兩行結合起來以產生所需的結果。

+0

假設我上面給出的表是來自更大表的查詢的結果,其中記錄不一定是這樣。將這作爲子查詢是否可以在原始表中進行更新。 – tksy 2009-09-14 07:40:34

+0

您可以將此查詢用作「創建新表」查詢。 – Andomar 2009-09-14 08:49:36

+0

還有一個疑問是我們可以直接添加像這樣a.field3 + b.field3 – tksy 2009-09-14 08:59:16

0

我想你可能可以。從您的示例行判斷,您希望每個「偶數」行和「奇數」行以明確定義的方式合併在一起。

有了這樣的問題,如果你不知道方式,我會開始使用查詢編輯器來玩。例如,您可以創建一個查詢來計算第1/2個實際ID的僞ID嗎?我認爲你可以,而且這會讓你得到一個共同的ID來把兩個字段聯繫起來。

但還有其他的方式來關聯這兩個領域。您可以合併表格與自身,選擇第一個版本爲非NULL字段4(或5),第二個版本的ID與第一個-1的ID相同。

如果您使用我首先提出的1/2 ID ID方法,則容易的事情是創建1個查詢來獲得「偶數」,而另一個查詢得到「奇數」行。然後你簡單地將這兩個查詢合併到第三個查詢中。

一旦你有了一個解決方案,你可以試試它,並嘗試其他的東西。

我會先在查詢編輯器中播放,然後在完成後查看SQL。 PS:我確信我可以爲你編碼,但你有什麼樂趣呢? ;-)

0

我對Andomar採用了稍微不同的方法,並使用mod函數返回偶數行。

SELECT a.id, a.field2, a.field3 + IIF(b.field3 IS NULL,'', b.field3), 
     b.field4, b.field5 
    FROM Table1 AS a 
     INNER JOIN Table1 AS b 
      ON a.ID = b.ID + 1 
WHERE Table1_1.ID MOD 2 = 0; 
+0

在這兩種情況下,我得到一個錯誤,用於函數Isnull(b.field3,'')的參數的錯誤數量。我不確定這裏的wromg是什麼。 Isnull可以在Ms Access中使用嗎? – tksy 2009-09-14 08:16:25

+0

啊對,Access ISNULL只有1個參數。試試這個:Iif(IsNull(b.field3),'',b.field3) – Andomar 2009-09-14 08:51:35

0

我不認爲任何的答案在這裏是穩健的,因爲它取決於ID字段是連續的,而且即使是連續,它是在值下一個連續的記錄。

我想知道更多關於Field3中的數據,即它是否有意義。

+0

第一個爲我工作。字段3中的數據基本上是對產品的描述 – tksy 2009-09-15 08:06:51