【问题标题】:MS ACCESS SQL Table MergeMS ACCESS SQL 表合并
【发布时间】:2013-06-25 17:40:37
【问题描述】:

表1

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 

我有 Table1 上面给出的信息。我有两种类型的帐户:

  1. 主账号(01结尾)
  2. 子账号(03结尾)

现在,我需要一个表格,将所有主帐户和子帐户合并到一个帐号中,其中帐号将与其主帐号相同,但帐户类型将为 @ 987654324@.

现在我们还有 2 列:

  1. 资产市场价值
  2. Acct Asset MV

在表 1 中:Acct Asset MV 列显示主账户的总和 (30 + 40 + 20 + 30 = 120),Asset Mkt Val 列显示子账户的总和 (50 + 10 + 20 = 80)。

现在在表 2 中:我想让 Acct Asset MV 包含所有帐户的总和 (120 + 80 = 200),在子帐户中 [Asset Mkt Val] 应该是 80。

【问题讨论】:

  • Gord - 如果您要进行大多数编辑,祝您好运。但是,当您编辑某人的帖子时,如果您确实修复了某些内容并使其在语法上更正确或其他内容,那就太好了。上面的帖子仍然充满了语法/拼写/逻辑错误。
  • @JohnnyBones 检查编辑历史。我不是第一个编辑问题而不给它一个完整的语法+拼写改头换面的人。我认为使表格更易于阅读可能有助于防止这个问题像 predecessor 那样崩溃和燃烧。
  • OP - 您请求的内容无法使用当前数据集完成。任何数据分组都不能在 Table1 中的第 1 行和第 4 行之间分开,这意味着它们最终可能会得到笛卡尔积或合并到同一条记录中。

标签: mysql sql ms-access


【解决方案1】:

在我看来,Table2 的数据可以推导如下:

首先创建一个名为 [Table1Totals] 的已保存查询...

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);

...返回...

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

那么 Table2 的数据将是主帐户记录 ("*01") 的 UNION 和每个子帐户的单个记录 ("*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

【讨论】:

  • 非常感谢@Gord Thompson。这对我有用。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多