0

そんな問い合わせが来ました

select
D.Name
,C.ClientId
,C.SetId
,C.CaseId
,C.ClientCaseNumber
,sum(DD.TransferedCapital) as [TransferedCapital]
,sum(PDH.Capital) as [Capital] 
,sum(PDH.Other) as [Other]
,sum(PDH.InterestsU) as [InterestsU]
,PH.AccountType
,sum(PDH.Overpayment) as [Overpayment]
,PROV.ProvisionValue
,PH.OpDate
,C.DateImported
FROM CaseDetails as C
join DebtorDetails as D on C.CaseDetailsId = D.CaseDetailsId
join PaymentCaseHistory as PH on C.CaseDetailsId = PH.CaseDetailsId
join PaymentDocumentHistory as PDH on PH.PaymentId = PDH.PaymentCaseHistoryId
join ClientProvision as PROV on C.ProductId = PROV.ClientProductId
join DocumentDetails as DD on C.CaseDetailsId = DD.CaseDetailsId

WHERE (PH.IsDeleted is NULL or PH.IsDeleted <> 'True') and C.ProductId = PROV.ClientProductId and C.ClientId= '2'
GROUP by D.Name, C.ClientId, C.CaseId, C.SetId, C.ClientCaseNumber,  PH.AccountType, PDH.Overpayment, PH.OpDate, C.DateImported, PROV.ProvisionValue
ORDER by PH.OpDate

問題は、結果が少ない場合 (ケースに関連付けられたドキュメントが複数ある場合) にドキュメントの数を掛けることです。

例:

ケースには 3 つのドキュメントがあり、ユーザーがケースに関連する支払いを追加すると、値はすべてのドキュメントに 0 まで分散されます。

ケースの資本金は 6100 ですが、結果は 18300 を示しています。支払った資本金は 4372,03 と表示されるはずですが、13116,09 などと表示されます。

おそらく、「GROUP BY」セクションのどこかで間違いを犯しました。

クエリは次のように機能する必要があります。総資本、過払いなどをケースごとに合計するため、ケースにドキュメントがほとんどない場合でも、合計の結果は 1 つしか表示されません。

4

2 に答える 2

0

CaseDetails 行ごとに複数の DocumentDetails 行があると Capital やその他の列の値が正しくないと述べているため、サブクエリでほとんどのデータを取得し、外側のクエリで DocumentDetails テーブルを結合して正しい合計を取得できます。他のすべての合計/グループ化が実行された後に DocumentDetails テーブルを結合することにより、サブクエリの結果セットに結合された各 DocumentDetails 行が他の結合テーブルによって乗算されないようにします。

select
sum(DD.TransferedCapital) as [TransferedCapital]
,r.Name
,r.ClientId
,r.SetId
,r.CaseId
,r.ClientCaseNumber
,r.[Capital] 
,r.[Other]
,r.[InterestsU]
,r..AccountType
,r.[Overpayment]
,r.ProvisionValue
,r.OpDate
,r.DateImported
from (
    select
    D.Name
    ,C.ClientId
    ,C.SetId
    ,C.CaseId
    ,C.ClientCaseNumber
    ,sum(PDH.Capital) as [Capital] 
    ,sum(PDH.Other) as [Other]
    ,sum(PDH.InterestsU) as [InterestsU]
    ,PH.AccountType
    ,sum(PDH.Overpayment) as [Overpayment]
    ,PROV.ProvisionValue
    ,PH.OpDate
    ,C.DateImported
    ,C.CaseDetailsId
    FROM CaseDetails as C
    join DebtorDetails as D on C.CaseDetailsId = D.CaseDetailsId
    join PaymentCaseHistory as PH on C.CaseDetailsId = PH.CaseDetailsId
    join PaymentDocumentHistory as PDH on PH.PaymentId = PDH.PaymentCaseHistoryId
    join ClientProvision as PROV on C.ProductId = PROV.ClientProductId

    WHERE (PH.IsDeleted is NULL or PH.IsDeleted <> 'True') and C.ProductId = PROV.ClientProductId and C.ClientId= '2'
    GROUP by D.Name, C.ClientId, C.CaseId, C.SetId, C.ClientCaseNumber,  PH.AccountType, PDH.Overpayment, PH.OpDate, C.DateImported, PROV.ProvisionValue
     ) r
join DocumentDetails as DD on r.CaseDetailsId = DD.CaseDetailsId
ORDER by r.OpDate
于 2013-08-31T22:58:37.157 に答える
0

DocumentDetails への結合を削除して置き換えることができます

sum(DD.TransferedCapital) as [TransferedCapital]

(select sum(DD.TransferedCapital) from CaseDetails CDD inner join DocumentDetails as DD on DD.CaseDetailsId = CDD.CaseDetailsId where C.CaseID = CDD.CaseID) as [TransferedCapital]

where DD.CaseDetailsID = C.CaseDetailsIDC.CaseDetailsID がグループ化されていないため、このサブクエリ内でこの条件を使用することはできません。CaseID は。別のレベルでの合計が必要な場合は、この ID を変更してください。

于 2013-08-31T10:20:50.073 に答える