Sql 建立会计跟踪余额报告绩效问题
假设我们有如下的日记账分录表Sql 建立会计跟踪余额报告绩效问题,sql,database,oracle,date-arithmetic,accounting,Sql,Database,Oracle,Date Arithmetic,Accounting,假设我们有如下的日记账分录表 create table jour_entries (jseq number, j_date date, Eseq number, account_no varchar2(32), debit number, credit number, note varchar2(256) ); 如何在SQL中为试算平衡构建最佳性能报告?报告列为 帐号:是帐号 月内借方:指从给定月1日起至该月底(或如果给定日期在当月,则截至当日)与账号相
create table jour_entries
(jseq number,
j_date date,
Eseq number,
account_no varchar2(32),
debit number,
credit number,
note varchar2(256) );
如何在SQL中为试算平衡构建最佳性能报告?报告列为
- 帐号:是帐号
- 月内借方:指从给定月1日起至该月底(或如果给定日期在当月,则截至当日)与账号相关的所有借方的总和
- 月内贷记:是从给定月1日开始到该月底(或如果给定日期为本月,则截至当日)与账号相关的所有贷记的总和
- 借方至本日:指给定日期年份内(从给定日期的1月1日起至当日)与账号相关的所有借方的累计总和
- 信用证到期日:指给定日期年份内(从给定日期的1月1日起至当日)与账号相关的所有信用证的累计金额
我尝试了以下选择:
select account_number
, debit_within_month
, credit_within_month
, debit_till_this_day
, credit_till_this_day
from jour_entries j,
(select account_number, sum(debit) debit_within_month,
sum(credit) credit_within_month
from jour_entries
where j_date between trunc(given_date, 'month') and given_date
group by account_number
) j1,
(select account_number, sum(debit) debit_till_this_day,
sum(credit) credit_till_this_day
from jour_entries
where j_date between trunc(given_date, 'year') and given_date
group by account_number
) j2
wherer j.account_number = j1.account_number
and j.account_number = j2.account_number
但我正在寻找其他解决方案(可能通过使用分析函数)以获得最佳性能。如果我理解您的问题,听起来这样的解决方案应该适合您:
SELECT JE.Account_no as Account__Number,
SUM(JE2.debit) as Debit_Within_Month,
SUM(JE2.credit) as Credit_Within_Month,
SUM(JE.debit) as Debit_Till_This_Day,
SUM(JE.credit) as Credit_Till_This_Day
FROM Jour_Entries JE
LEFT JOIN (
SELECT jseq, Account_No, Debit, Credit
FROM Jour_Entries
WHERE to_char(j_date, 'YYYY') = 2013 AND to_char(j_date, 'mm') = 2
) JE2 ON JE.jseq = JE2.jseq
WHERE to_char(j_date, 'YYYY') = 2013
GROUP BY JE.Account_no
这是我的建议
祝你好运。我将使用SQL*Plus替换变量语法来表示给定的月份。您需要为实际使用的任何客户端更改此选项
select account_number
, sum ( case when J_date between trunc(&given_date, 'mm')
and least(sysdate, last_day(&given_date))
then debit else 0 end ) as debit_within_month
, sum ( case when J_date between trunc(&given_date, 'mm')
and least(sysdate, last_day(&given_date))
then credit else 0 end ) as credit_within_month
, sum ( case when J_date between trunc(&given_date, 'yyyy') and sysdate)
then debit else 0 end ) as debit_til_this_day
, sum ( case when J_date between trunc(&given_date, 'yyyy') and sysdate)
then credit else 0 end ) as credit_til_this_day
from jour_entries
group by account_number
解释
- 应用于日期的
将其截断为给定的格式掩码。因此trunc()
给出了月份的第一个,而'yyyy'掩码给出了一年的第一个李>trunc(sysdate,'mm')
给出给定月份的最后一天last_day()