2017-08-31 13 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だけを返しています。データベースのいくつかのテーブルに値があります。私が間違っているところで誰でも助けてくれますか?Sql結合と和集合を使用して

+1

親切に「私ができるテキスト形式で – zarruq

+0

をスキーマ、サンプルデータと所望の出力を共有しますその質問を読んでください。あまりにも多くの側面のスクロール。それを改行して改行します(改行を含む)。 – jarlh

答えて

0

「0のみを返す」とは、合計のためにゼロを返すことを意味しますか、それとも行が返されないことを意味しますか?

合計がゼロであることを意味する場合、ほとんどの場合、結合はもう機能しません。 ChartOfAccountsまたは他のテーブルの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';