私はID(プライマリキー)を持つメインテーブル「契約」を持ち、すべての行についてまとめなければならない列もあります。 私の2番目のテーブル "payments"は "contracts"と1対nの関係にあり、 "contracts"のすべての行は "payments"に0から数行あります。異なる行数とグループを持つ2つの選択を組み合わせる
私は、次のような-table "contrats" を選択することができます。
select c.Id, sum(c.field1 + c.field2 + c.field3) as TotalC from contracts c group by c.Id
私は-tableのような "支払い" から選択することができます。
select p.Id, sum(p.field1) from payments p group by p.Id
のでc.Idとp.Id関係がある。どちらの選択でも、契約IDごとに1行が表示されます。しかし、すべての契約が支払いを持っているわけではありません。それら2つの選択肢を合理的な方法で組み合わせることは可能ですか?または私は私のプログラムでそれらの2つの選択を取得し、SQLの外で比較を行うのが良いでしょうか?
私はscaisEdgeが提案のようにINNER JOINを使用することができますが、私はこれを持っている 問題がある:(endresultをグループ化し、AFTER
ID | TotalContractSum | SinglePayment 22 | 50,00 | 25,00 22 | 50,00 | 30,00
結果:選択の
結果、それがグループ化される前に、 ):
22 | 100,00 | 55,00
今SinglePaymentは、それがなければならないようにまとめているが、2つの行があったのでTotalContractSumは、倍増しています支払いテーブルに表示されます。要するにここではグループ分けが問題です。単一の行に合計を使用してはならない場合は、内部使用することができます
に参加:選択p.Id、合計(p.field1)の支払いpをグループからp.Idにより、選択したpと同じです。 Id、p.field1 payment p –
両方のテーブルの構造を入力してください。これらの2つのテーブルの間に関係があるかどうかを知るだけです。 –
この種の問題は、悪い設計の症状になる可能性があります。 – Strawberry