0

2つのテーブルがあります。1つは請求書用で、もう1つは支払い用です。

tbl_Invoice

請求書

tbl_payment

支払い

希望の出力は次のとおりです。

PSUM        IPRICE
----------- ------------
312.00      1100.00

どこ:

PSUM支払いの合計です。

IPRICEそのクライアントのTotal_priceの合計です。

私が試したクエリは次のとおりです。

select 
IsNull(sum(p.amt), 0) PSUM,
IsNull(sum(i.total_price), 0) IPRICE
from tbl_invoice i
left join tbl_payment p
on i.invoice_id = p.invoice_id
    and i.client_id = p.client_id
where i.client_id = 5
group by i.invoice_id
order by i.invoice_id

しかし、それは間違った出力を与えます:

PSUM        IPRICE
----------- ------------
312.00      400.00
0.00        1000.00
4

1 に答える 1

1

あなたがこれを望んでいるようです。amtこれにより、グループ化されていないとの合計が得total_priceられます。invoice_id違いは、バージョンによってグループ化されます。

select 
  IsNull(sum(p.amt), 0) PSUM,
  IsNull(sum(distinct i.total_price), 0) IPRICE
from tbl_invoice i
left join tbl_payment p
  on i.invoice_id = p.invoice_id
  and i.client_id = p.client_id
where i.client_id = 5

SQL FiddlewithDemoを参照してください

これを書く別の方法は、サブクエリを使用することです。

select 
  IsNull(sum(p.amt), 0) PSUM,
  IsNull(sum(i.total_price), 0) IPRICE
from
(
  select sum(total_price) total_price, invoice_id, client_id
  from tbl_invoice
  group by invoice_id, client_id
) i
left join
(
  select sum(amt) amt, invoice_id, client_id 
  from tbl_payment
  group by invoice_id, client_id
) p
  on i.invoice_id = p.invoice_id
  and i.client_id = p.client_id
where i.client_id = 5

SQL FiddlewithDemoを参照してください

どちらも同じ結果を生成します。

| PSUM | IPRICE |
-----------------
|  312 |   1100 |
于 2012-12-17T11:34:35.817 に答える