2013-06-25 73 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