2

問題を設定するには、会費と登録を追跡するために使用されるAccessテーブルの4つのレコードを追跡する必要があります。このテーブル名は「トランザクション」です

ID | Transaction Date | Transaction Name | Credit Account | Debit Account | Amount
1 | 9/1/2011 | 2011 Yearly Registration | Accounts Receivable | Income : Registration | 27
2 | 2/18/2012 | Registration Payment | Cash | Accounts Receivable | 27
3 | 11/1/2012 | 2012 Yearly Registration | Accounts Receivable | Income : Registration | 27
4 | 12/7/2012 | Registration Payment | Cash | Accounts Receivable | 27

([トランザクション名]フィールドは、実際には、実際の名前が格納されている別のテーブルへのFKを持つIDフィールドです。これはすぐに表示されます)。

次に、これらのレコードを、数量を合計して残高を見つけることができる形式に変換するクエリを作成しました。

SELECT [Transaction Date], [Transaction Name], (select [Account Name] from Account_lookup where ID = Transactions.[Credit Account]) as Account , sum(Amount) as [Totals]
FROM Transactions
GROUP BY [Transaction Date],[Transaction Name],[Credit Account]
UNION SELECT  [Transaction Date],[Transaction Name],(select [Account Name] from Account_lookup where ID = Transactions.[Debit Account]) as Account, sum(Amount)*-1 as [Totals]
FROM Transactions
GROUP BY [Transaction Date],[Transaction Name],[Debit Account]
ORDER BY 3, 1 DESC;

その結果は次のようになります(この問題にとって重要ではないため、収入と現金のレコードは削除されました)。このクエリは「クレジットおよびデビットアカウントの合計」と呼ばれます。

Transaction Date | Transaction Name | Account | Totals
9/1/2011 | 2011 Yearly Registration | Accounts Receivable | 27
2/18/2012 | Registration Payment | Accounts Receivable | (27)
11/1/2012 | 2012 Yearly Registration | Accounts Receivable | 27
12/7/2012 | Registration Payment | Accounts Receivable | (27)

したがって、[合計]列を合計するクエリは0を返す必要がありますが、そうではありません。

上記のクエリ(別のクエリをクエリするクエリ)に加えて次のクエリを実行すると、

SELECT [Credit and Debit Account Totals].Account, Sum([Credit and Debit Account Totals].Totals) AS SumOfTotals
FROM [Credit and Debit Account Totals]
GROUP BY [Credit and Debit Account Totals].Account
HAVING ((([Credit and Debit Account Totals].Account)="Accounts Receivable"));

私は次のようになります:

Account | SumOfTotal
Accounts Receivable | 27

合計をカウントに変更すると、3になります。合計が0、カウントが4になると予想しています。

4つのレコードすべてを使用するためにAccessを取得するにはどうすればよいですか?トランザクション名が同じであるため、Accessはどういうわけか2番目の支払いを無視していると思いますが、Nameは合計クエリの一部ではなく、Dateフィールドは最初のクエリで各行を全体的に区別します。

SELECTの後にALLを入れてみましたが、うまくいきませんでした。最初にすべてのデータを別のテーブルにコピーする必要がありますか?ユニオンクエリの上で合計クエリを実行すると、Accessが混乱しますか?2番目のクエリに日付を追加して、各行を区別すると、4つのレコードすべてが表示されます。

4

1 に答える 1

0

下がってください。最初のクエリを変更します:

SELECT [Transaction Date], [Transaction Name], 
       [Credit Account] As Account,Amount 
FROM Transactions
UNION 
SELECT [Transaction Date],[Transaction Name], 
       [Debit Account] As Account,Amount*-1 
FROM Transactions

それで

SELECT [Credit and Debit Account Totals].Account, 
       Sum([Credit and Debit Account Totals].amount) AS SumOfamount
FROM [Credit and Debit Account Totals]
GROUP BY [Credit and Debit Account Totals].Account
HAVING [Credit and Debit Account Totals].Account="Accounts Receivable"

グループ化のレイヤーが複雑になりすぎたと思います。

再コメントを編集

SELECT [Transaction Date], [Transaction Name], 
       Account, Sum(Amount ) AS Total
FROM (SELECT [Transaction Date], [Transaction Name],
      [Credit Account] As Account,Amount 
FROM Transactions
UNION 
SELECT [Transaction Date],[Transaction Name], 
       [Debit Account] As Account,Amount*-1 
FROM Transactions)  AS q
GROUP BY [Transaction Date], [Transaction Name], Account
ORDER BY 3, 1 DESC;
于 2013-01-16T14:03:54.050 に答える