SQL查询以收集常见业务报告的数据。
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查询开始满足以下要求:
- 如果ToAcct.AcctType == (Income OR Asset),则将“总账”.Amount添加到TotalRevenue
- 如果ToAcct.AcctType == (Expense OR Liability),则将“总账”.Amount添加到TotalExpenses
在修改我的“账户类型”以包含其是否为收入/资产或支出/负债后,我尝试了这两个SQL查询:
- SELECT SUM(IIF((Credit = TRUE), Amount, 0)) AS RevenueTotal FROM GeneralLedger;
- SELECT SUM(IIF((Credit = FALSE), Amount, 0)) AS ExpenseTotal FROM GeneralLedger
这些查询是可以工作的,但是我在“总账”表单上有一个额外的复选框“Credit”。在规范化过程中,我认为让账户确定是借方还是贷方账户会更好。
经过多次在Google上搜索和阅读无数问题和答案后,我没有看到与我尝试做的类似的内容。
输出应该为我提供创建损益表、收入报表、企业和税务报表所需的信息。我相信我可以通过SQL查询获取基于账户的金额,但我不确定如何获取账户类型的“Debit”字段以确定是添加还是减去金额。
如果必要,我可能会在这个数据库支撑的C#应用程序中完成这个任务。如果我可以在SQL查询级别上完成它,我将能够将其用作项目中的视图,而不必编码它。非常感谢任何帮助。
在进行了几次搜索后,我发现我需要使用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子句配合使用。就是这些简单的问题让人头疼...