2013-06-25 72 views
-2

表1MS ACCESS SQL表合併

Acct Numb Account Type Asset Mkt Val Acct Asset MV 
--------- ------------ ------------- ------------- 
881009201 Main Account   30   120 
881009201 Main Account   40   120 
881009201 Main Account   20   120 
881009201 Main Account   30   120 
881009203 Sub Account    50   80 
881009203 Sub Account    10   80 
881009203 Sub Account    20   80 

表2

Acct Numb Account Type Asset Mkt Val Acct Asset MV 
--------- ------------ ------------- ------------- 
881009201 Main Account   30   200 
881009201 Main Account   40   200 
881009201 Main Account   20   200 
881009201 Main Account   30   200 
881009201 Sub Account    80   200 

我有表1與上面給出的信息。我有2種類型的帳戶:

  1. 主賬戶(以01結尾)
  2. 子賬戶(以03結尾)

現在,我需要有所有的主要賬目的表以及子賬戶合併爲一個賬戶號碼,其中賬戶號碼將與其主賬戶號碼相同,但賬戶類型將爲Sub Account

現在我們有2列:

  1. 資產街市纈氨酸
  2. 會計資產MV

在表1中:列Acct Asset MV顯示主要帳戶(30 + 40的總和+ 20 + 30 = 120)和Asset Mkt Val顯示子科目(50 + 10 + 20 = 80)的總和。

現在表2:我想有Acct Asset MV包含所有賬戶的總和(120 + 80 = 200),並在子帳戶的[資產街市瓦爾]應該是80

+0

Gord - 如果您要進行大多數編輯,祝您好運。但是,當你編輯某人的帖子時,如果你實際上修改了某些東西並使其更加具有正確性或某種東西,那將會是一件好事。上面的帖子仍然充滿了語法/拼寫/邏輯錯誤。 –

+0

@JohnnyBones檢查編輯歷史。我不是第一個沒有給它完整的語法+拼寫改造的人編輯這個問題的人。我認爲讓表格更容易閱讀可能有助於防止此問題像[前輩](http://stackoverflow.com/q/17299159/2144390)那樣崩潰和燃燒。 –

+0

OP - 您正在請求的內容無法用當前數據集完成。任何數據分組都不能在表1中的第1行和第4行之間進行區分,這意味着它們最終可能以笛卡爾積或結合到同一記錄中。 –

回答

0

這在我看來,對於表2的數據可以得出如下:

開始通過創建

SELECT 
    Left([Acct Numb],Len([Acct Numb])-2) AS [Acct Root], 
    Right([Acct Numb],2) AS [Acct Suffix], 
    First(Table1.[Account Type]) AS [FirstOfAccount Type], 
    Sum(Table1.[Asset Mkt Val]) AS [SumOfAsset Mkt Val] 
FROM Table1 
GROUP BY 
    Left([Acct Numb],Len([Acct Numb])-2), 
    Right([Acct Numb],2); 

名爲[Table1Totals]保存的查詢......回......

Acct Root Acct Suffix FirstOfAccount Type SumOfAsset Mkt Val 
--------- ----------- ------------------- ------------------ 
8810092 01   Main Account      120 
8810092 03   Sub Account       80 

然後對錶2中的數據將是主帳戶記錄(「* 01」)工會,每個子賬戶(「* 03」)的一條記錄:

SELECT 
    t1.[Acct Numb], 
    t1.[Account Type], 
    t1.[Asset Mkt Val], 
    (
     SELECT SUM(t1t1.[SumOfAsset Mkt Val]) 
     FROM Table1Totals t1t1 
     WHERE t1t1.[Acct Root]=Left(t1.[Acct Numb],Len(t1.[Acct Numb])-2) 
    ) AS [Acct Asset MV] 
FROM Table1 t1 
WHERE t1.[Acct Numb] LIKE "*01" 
UNION ALL 
SELECT 
    t1t2.[Acct Root] & "01" AS [Acct Numb], 
    t1t2.[FirstOfAccount Type] AS [Account Type], 
    t1t2.[SumOfAsset Mkt Val] AS [Asset Mkt Val], 
    (
     SELECT SUM(t1t3.[SumOfAsset Mkt Val]) 
     FROM Table1Totals t1t3 
     WHERE t1t3.[Acct Root]=t1t2.[Acct Root] 
    ) AS [Acct Asset MV] 
FROM Table1Totals t1t2 
WHERE t1t2.[Acct Suffix] = "03" 

...返回...

Acct Numb Account Type Asset Mkt Val Acct Asset MV 
--------- ------------ ------------- ------------- 
881009201 Main Account    30   200 
881009201 Main Account    40   200 
881009201 Main Account    20   200 
881009201 Main Account    30   200 
881009201 Sub Account    80   200 
+0

非常感謝你@Gord Thompson。這對我有用。非常感謝。 – user2520291