交叉表查询

时间:2018-08-23 09:30:43

标签: sql oracle

让我们说我们有2个表:A和B。

在表A中,我们为客户付款。 numClient列标识的每个客户每年12次付款,付款列标识的付款金额每年。

表B中有每个客户每年的付款总和,因此每个客户每年仍仅由numClient列标识的行和由yearPayment列标识的付款。

我想要一个查询,该查询列出表B的yearPayment与表A中的付款总额不同的所有客户(显示numClient)。

由于这些表涵盖不同的年份,我只想查询2018年。在表A中,付款日期为PaymentDate Column。在表B中,付款年份是YearPayment列。

1 个答案:

答案 0 :(得分:3)

整个故事听起来很不对劲。不是您的话,而是模型-您为什么要使用表B?将付款保留在原处(表A)。如果您必须对它们进行求和,请这样做。或创建一个视图。但是,将它们分别放在两个表中只是一个问题(您现在遇到的一个-找到区别)。

无论如何:

select a.id_customer, sum(a.payment), b.sum_payment
from a join b on a.id_customer = b.id_customer
where extract(year from a.date_column) = 2018
  and extract(year from b.date_column) = 2018
group by a.id_customer, b.sum_payment
having b.sum_payment <> sum(a.payment)