2016-08-16 102 views
0

我有一個主表「合同」與一個id(主鍵)和一些列我必須彙總爲每一行。 我的第二張表「支付」與「合同」有1至n的關係,對於「合同」中的每一行,「支付」中有零到幾行。結合兩個選擇不同的行數和一個組

我可以選擇 「contrats」 - 表這樣:

select c.Id, sum(c.field1 + c.field2 + c.field3) as TotalC from contracts c group by c.Id 

我可以從 「費」 - 表像選擇:

select p.Id, sum(p.field1) from payments p group by p.Id 

所以c.Id和p.Id有關係。兩份選擇都會爲每個合約ID提供一行。但並非每個合同都有付款。是否有可能以合理的方式將這兩項選擇結合起來?或者我會更好地在我的程序中獲得這兩個選擇,並在sql之外進行比較?

我可以使用一個INNER JOIN像scaisEdge建議,但 我有這個問題是:

選擇的結果之前,它被分爲:

 
ID | TotalContractSum | SinglePayment 
22 | 50,00 | 25,00 
22 | 50,00 | 30,00 

結果後,分組(在endresult ):

 
22 | 100,00 | 55,00 

現在SinglePayment按照它應該組合在一起,但TotalContractSum已經翻了一番,因爲有兩行在付款表中。總之,分組是這裏的問題。

+0

如果不應該使用單排和:通過p.Id選擇p.Id,總和(p.field1)從支付P組,是相同的選擇P。 Id,p.field1 from payment p –

+0

請提供兩個表格的結構。只是想知道這兩張表之間是否有任何關係。 –

+1

這類問題可能是設計不佳的症狀 – Strawberry

回答

0

您可以使用內部聯接

select c.Id, sum(c.field1 + c.field2 + c.field3) as TotalC , sum(p.field1) 
from contracts c 
INNER JOIN payments p 
ON c.id = p.id 
group by c.I 
+0

感謝您的建議。我在網上發現了類似的問題,但問題在於此。 – BionicWave

+0

最終更新您的帖子並顯示數據樣本和預期結果 – scaisEdge