2017-08-31 93 views
0
"Select COA.AccountNo, AccountName, (coalesce(DVDebit,0) + coalesce(JVDebit,0) + coalesce(CTDebit,0)) AS Debit, (coalesce(CVCredit,0)+ coalesce(JVCredit,0))As Credit From ChartOfAccounts AS COA Left Join (Select AccountNo, Sum(Credit) AS CVCredit From CreditVouchersBody Group By AccountNo) AS CreditVoucher ON COA.AccountNo=CreditVoucher.AccountNo Left Join (Select AccountNo, Sum(Debit) AS DVDebit From DebitVouchersBody Group By AccountNo) AS DebitVoucher ON COA.AccountNo=DebitVoucher.AccountNo Left Join (Select AccountNo, Sum(Debit) As JVDebit, Sum(Credit) AS JVCredit From JournalVouchersBody Group By AccountNo) As JournalVoucher ON COA.AccountNo=JournalVoucher.AccountNo Left Join (Select AccountNoPayTo, Sum(Amount) As CTDebit From BankCheques Group By AccountNoPayTo) As BankdCheque ON COA.AccountNo=BankdCheque.AccountNoPayTo WHere COA.IsDetailed ='True' AND COA.AccountType ='Expense'" 

该查询工作正常,并且按照需求取值。但是现在,我在查询中没有改变任何内容,但是我更改了数据库值,并且此查询返回的值仅为0.数据库中的某些表中存在值。任何人都可以帮助我,我在这里错了。使用Coalesce的Sql加入和总计

+1

请分享您的架构,样本数据和期望的输出文本格式 – zarruq

+0

我可以”阅读该查询。太多的旁路滚动。 Rer格式化它,包括换行符。 – jarlh

回答

0

“只返回0”意味着它返回零和还是你的意思是它不返回任何行?

如果您的意思是总和为零,那么很有可能连接不再工作。您是否更改了ChartOfAccounts中的AccountNo或其他表中的AccountNo?

如果它没有返回任何行,则必须检查ChartOfAccounts,因为左连接不会减少您获得的行数。

如果ChartOfAccounts中有值,请检查IsDetailed和AccountType的值,并将它们与您的where条件进行比较。

select distinct IsDetailed from ChartOfAccounts

select distinct AccountType from ChartOfAccounts

对于别人:这是他的一个可读的形式查询:

select 
    COA.AccountNo 
    ,AccountName 
    ,(coalesce(DVDebit, 0) + coalesce(JVDebit, 0) + coalesce(CTDebit, 0)) as Debit 
    ,(coalesce(CVCredit, 0) + coalesce(JVCredit, 0))      as Credit 
from ChartOfAccounts as COA 
    left join 
    (
     select 
      AccountNo 
      ,sum(Credit) as CVCredit 
     from CreditVouchersBody 
     group by AccountNo 
    ) as CreditVoucher 
     on COA.AccountNo = CreditVoucher.AccountNo 
    left join 
    (
     select 
      AccountNo 
      ,sum(Debit) as DVDebit 
     from DebitVouchersBody 
     group by AccountNo 
    ) as DebitVoucher 
     on COA.AccountNo = DebitVoucher.AccountNo 
    left join 
    (
     select 
      AccountNo 
      ,sum(Debit) as JVDebit 
      ,sum(Credit) as JVCredit 
     from JournalVouchersBody 
     group by AccountNo 
    ) as JournalVoucher 
     on COA.AccountNo = JournalVoucher.AccountNo 
    left join 
    (
     select 
      AccountNoPayTo 
      ,sum(Amount) as CTDebit 
     from BankCheques 
     group by AccountNoPayTo 
    ) as BankdCheque 
     on COA.AccountNo = BankdCheque.AccountNoPayTo 
where 
    COA.IsDetailed  = 'True' 
    and COA.AccountType = 'Expense';