繁体   English   中英

SQL查询联接4个表并从2个不同的表中获取2列的总和

[英]SQL query to join 4 Tables and get sum of 2 columns from 2 different tables

表1:采购报告

|id| VoucherNO| VoucherDate|
+--+----------+------------+
|1 |  0001    |  28/9/2017 |
|2 |  0010    |  27/9/2017 |

表2:详细购买报告

|id | ITEMID | QTYpurchased | voucher
+---+--------+--------------+--------
|1  |   101  | 12           |   0001
|2  |   120  | 25           |   0001
|3  |   121  | 21           |   0014

表3:销售报告

|id| VoucherNO| VoucherDate|
+--+----------+------------+
|1 |  0025    |  25/9/2017 |
|2 |  0058    |  23/9/2017 |

表4:明细出售

|id | ITEMID | QTYpurchased | voucher
+---+--------+--------------+--------
|1  |  101   |  8           |   0025
|2  |  120   |  5           |   0025
|3  |  121   | 10           |   0058

该查询的目的是将所有4个表联接起来以返回2列,即

  • 第1栏:商品名称
  • 2:在给定日期之间具有相同项目ID的差额购买数量和出售数量给出了该特定日期的项目数量。

我试过的查询如下

SELECT
  A.ITEMN, 
  A.ITEMNAME,
  SUM(CAST(C.QUANTITY AS numeric(18,2))) - SUM(CAST(A.QTY AS numeric(18,2))) as QTY 
FROM DETAILSALE A, SALESREPORT B, DETAILPURCHASES C, PURCHASEREPORT D 
WHERE A.BARCODE = B.VOUCHERNO 
  AND  C.BARCODE = D.VOUCHERNO 
  AND D.VOUCHERDATE=B.VOUCHERDATE
  AND D.VOUCHERDATE BETWEEN '" & DATE1.Text & "' AND '" & DATE2.Text & "'   
GROUP BY A.ITEMN,A.ITEMNAME 
ORDER BY A.ITEMN ASC

要求的输出:

| ITEMID | QTY |
+--------+-----+
|  101   | 2   |
|  120   | 10  |
|  121   | 10  |

首先聚集,然后才加入。 我的描述中缺少产品表,表描述中的名称与查询不匹配,因此您可能需要在查询中调整名称:

select
  product.id,
  product.name,
  purchases.total,
  sales.total
from product
left join
(
  select itemid, sum(quantity) as total
  from detail_purchase
  where voucher in (select voucher from purchase where date between date '2017-09-01' 
                                                                and date '2017-09-05')
  group by itemid
) purchases on purchases.itemid = product.itemid
left join
(
  select itemid, sum(quantity) as total
  from detail_sale
  where voucher in (select voucher from sale where date between date '2017-09-01'
                                                            and date '2017-09-05')
  group by itemid
) sales on sales.itemid = product.itemid;

如果只想购买和/或出售产品,请将外部联接更改为内部联接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM