使用主键的多表的MYSQL总和

MySQL对我来说还是一个新手,所以我很难找到这个特殊问题的答案.

我有大约60个供应商表,我想加入一个表.很多我们的供应商都带有相同的商品,所以我想将所有商品添加到一个表中,而那些具有相同sku的商品则将数量加在一起.我还想插入更高的成本和价格,并将其四舍五入到0.99,但如果它变得太复杂或者不能成功,我现在只会坚持使用sku和quanitity.我想从2个表开始,直到我能弄明白,然后一旦我掌握了解决方案,我就可以对所有这些表进行处理.这是2个表的示例:

Table A (SKU will be the primary key)
SKU     Vendor A SKU         Cost     Price      QTY
1000        VA100            49.99    62.99      10
1001        VA101            64.44    81.99      6
1002        VA102            37.67    47.99      24
1003        VA103            28.33    35.99      16
1004        VA104            26.33    35.99      18

Table B (SKU will be the primary key)

SKU     Vendor B SKU         Cost    Price       QTY
1000        VB100            49.99   62.95        21
1001        VB101            64.44   81.95        16
5001        VB501            32.67   40.95         4
5002        VB502            88.44   110.95      12
5003        VB503            87.21   109.95       2

所以最终结果将如下所示

SKU     Vendor A SKU     Vendor B SKU      Cost           Price         QTY
1000        VA100               VB100      49.99         62.99          31 <-- Sum
1001        VA101               VB101      64.44         81.99          22 <-- Sum
1002        VA102                          37.67         47.99          24
1003        VA103                          28.33         35.99          16
1004        VA104                          26.33         35.99          18
5001                            VB501      32.67         40.95           4
5002                            VB502      88.44         110.95         12
5003                            VB503      87.21         109.95          2

正如您所看到的,前两个数量加在一起,以及插入的成本和价格中的更高.我尝试过各种变化:

Create Table MASTER
SELECT TableA.sku,TableA.VendorA_sku,TableA.cost,TableA.price,TableA.qty
UNION ALL
SELECT TableB.sku,TableB.VendorB_sku,TableB.cost,TableB.price,TableB.qty
GROUP BY sku

和变化:

Create Table MASTER
AS SELECT TableA.sku,TableA.VendorA_sku,TableA.cost,TableA.price,SUM(TableA.qty+TableB.qty)
GROUP BY sku

我尝试了很多不同类型的连接和工会,似乎无法看到我需要它的方式,也没有玩弄成本和价格的增加和舍入,因为我无法通过在重复的主键中添加quanitity.我必须每天做大约60张桌子和大约600k sku,所以任何帮助都会非常感激.(如果我没有正确输入这个,我也提前道歉,因为我是这些类型的论坛的新手)

最佳答案 以下内容对您有用:

select sku,
  min(case when Type = 'VendorA' THEN Vendor END) VendorA_SKU,
  min(case when Type = 'VendorB' THEN Vendor END) VendorB_SKU,
  cost,  
  price, 
  sum(QTY) Total
from
(
  select sku, VendorA_SKU Vendor, cost, price, qty, 'VendorA' Type
  from tablea
  union all 
  select sku, VendorB_SKU, cost, price, qty, 'VendorB' Type
  from tableb
) x
group by sku

SQL Fiddle with Demo

要确定一些事项,如果值不同或想要返回哪一个,您想要AVG()或MAX()的成本和价格吗?如果你这样做,你将使用以下命令返回MAX():

select sku,
  min(case when Type = 'VendorA' THEN Vendor END) VendorA_SKU,
  min(case when Type = 'VendorB' THEN Vendor END) VendorB_SKU,
  max(cost) MaxCost,
  max(price) MaxPrice,
  sum(QTY) Total
from
(
  select sku, VendorA_SKU Vendor, cost, price, qty, 'VendorA' Type
  from tablea
  union all 
  select sku, VendorB_SKU, cost, price, qty, 'VendorB' Type
  from tableb
) x
group by sku

SQL Fiddle with Demo

点赞