2013-06-25 3 views
-2

Таблица1MS Access SQL Таблица Merge

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 

Table2

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 с информацией, приведенной выше. У меня есть 2-х типов счетов:

  1. Основные данные (окончание с 01)
  2. Sub Account (заканчивающийся 03)

Теперь, мне нужна таблица, которая имеет все основные счета как так же как Сводные учетные записи объединяются в единый номер счета, где номер счета будет таким же, как и его основной номер счета, но Тип учетной записи будет Sub Account.

Теперь у нас есть еще 2 колонки:

  1. Asset МКТ Вал
  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.

+0

Gord - Если вы собираетесь за большинством правок, удачи в этом. Однако, когда вы редактируете чей-то пост, было бы неплохо, если бы вы на самом деле исправили что-то и сделали его более грамотно правильным или чем-то еще. Вышеупомянутая публикация по-прежнему заполнена ошибками грамматики/орфографии/логики. –

+0

@JohnnyBones Проверьте историю изменений. Я не был первым, кто отредактировал этот вопрос, не предоставив ему полную грамматику + правописание. Я думал, что упрощение чтения таблиц может помочь предотвратить сбой и сжигание этого вопроса, как это делал его предшественник (http://stackoverflow.com/q/17299159/2144390). –

+0

OP - то, что вы запрашиваете, не может быть выполнено с помощью текущего набора данных. Любая группировка данных не может копироваться между строками 1 и 4 в таблице 1, а это означает, что они, скорее всего, попадут в декартово произведение или будут объединены в одну и ту же запись. –

ответ

0

Мне кажется, что данные для 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 бы UNION из основных учетных записях ("* 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