4

MySQL 对我来说仍然很新,所以我很难找到这个特定问题的答案。

我有大约 60 个供应商表,我想将它们加入到一张表中。我们的很多供应商都携带相同的物品,所以我想将所有物品添加到一张桌子上,而那些具有相同 sku 的供应商将数量加在一起。我还想插入更大的成本和价格,并将其四舍五入到 0.99,但如果它变得太复杂或无法实现,我现在将坚持只使用 sku 和数量。我想从 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

如您所见,前 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

我尝试了许多不同类型的联接和联合,但似乎无法得到任何符合我需要的东西,我也没有玩弄成本和价格的增加和四舍五入,因为我无法过去在重复的主键中添加数量。我必须每天使用大约 60 张桌子和大约 600k sku 进行此操作,因此将不胜感激任何帮助。

如果我没有正确输入,我也提前道歉,因为我是这些类型的论坛的新手

4

1 回答 1

2

以下内容应该适合您:

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

于 2012-09-19T18:21:14.273 回答