SQL查询以收集常见业务报告的数据。

10 浏览
0 Comments

SQL查询以收集常见业务报告的数据。

我有一个包含“总账”、“账户类型”和“账户图表”的数据库。布局如下:

“账户类型”

AcctTypeID Autonumber Long Integer Not Null Primary Key

TypeName Text(50) Not Null

Description Memo

Credit Yes/No Not Null Default Yes

“账户图表”

AcctID Long Integer Not Null Primary Key
AcctName Text(30) Not Null
Description Memo
AcctType Long Integer Not Null

“总账”

EntryID Autonumber Long Integer Not Null Primary Key

EntryDate Date/Time Not Null Default #1/1/1900#

EntryType Text(12) Not Null Default "DC"

Description Memo

FromAcct Long Integer Not Null

ToAcct Long Integer Not Null

Taxable Yes/No Not Null Default No

表之间的关系

从“账户图表”->AcctID到“总账”->FromAcct的一对多关系
从“账户图表”->AcctID到“总账”->ToAcct的一对多关系
从“账户类型”->TypeID到“账户图表”->AcctType的一对多关系

我需要从两个不同的SQL查询开始满足以下要求:

  1. 如果ToAcct.AcctType == (Income OR Asset),则将“总账”.Amount添加到TotalRevenue
  2. 如果ToAcct.AcctType == (Expense OR Liability),则将“总账”.Amount添加到TotalExpenses

在修改我的“账户类型”以包含其是否为收入/资产或支出/负债后,我尝试了这两个SQL查询:

  1. SELECT SUM(IIF((Credit = TRUE), Amount, 0)) AS RevenueTotal FROM GeneralLedger;
  2. SELECT SUM(IIF((Credit = FALSE), Amount, 0)) AS ExpenseTotal FROM GeneralLedger

这些查询是可以工作的,但是我在“总账”表单上有一个额外的复选框“Credit”。在规范化过程中,我认为让账户确定是借方还是贷方账户会更好。

经过多次在Google上搜索和阅读无数问题和答案后,我没有看到与我尝试做的类似的内容。

输出应该为我提供创建损益表、收入报表、企业和税务报表所需的信息。我相信我可以通过SQL查询获取基于账户的金额,但我不确定如何获取账户类型的“Debit”字段以确定是添加还是减去金额。

如果必要,我可能会在这个数据库支撑的C#应用程序中完成这个任务。如果我可以在SQL查询级别上完成它,我将能够将其用作项目中的视图,而不必编码它。非常感谢任何帮助。

0
0 Comments

在进行了几次搜索后,我发现我需要使用4个不同的查询来完成我尝试的目标。适当的查询结果如下:

总支出:

SELECT SUM(Amount) AS TotalExpense
FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID=GeneralLedger.ToAcct
WHERE ChartOfAccounts.AcctType = 4;

总收入:

SELECT SUM(Amount) AS TotalRevenue
FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID=GeneralLedger.ToAcct
WHERE ChartOfAccounts.AcctType = 3;

总负债:

SELECT SUM(Amount) AS TotalLiabilities
FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID = GeneralLedger.ToAcct
WHERE ChartOfAccounts.AcctType = 2;

总资产:

SELECT SUM(Amount) AS TotalAssets
FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID = GeneralLedger.ToAcct
WHERE ChartOfAccounts.AcctType = 1;

问题只是我的内连接无法正确地与我的WHERE子句配合使用。就是这些简单的问题让人头疼...

最有帮助的链接是:StackOverflow: sql - INNER JOIN WHERE clause

0