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
要确定一些事项,如果值不同或想要返回哪一个,您想要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