我想组2台基于前两列。我已经成功地做到了这一点和代码可以看到下面。我需要一些帮助,从每个表的总和其余列,并插入到我的输出表重命名列可以蜜蜂如下图所示。在输出的预测列是从MI_STAT_TOTAL表的结果和SALES列是从SALES_TOTAL表的结果。
表:MI_STAT_TOTAL
Planning_Hierarchy_2 Region_Description Measure_Values
xx LATAM 2
yy ASPAC 3
zz EMEA 4
zz EMEA 1
aa ASPAC 1
表:SALES_TOTAL
Product_Number Region Item_Values
xx LATAM 1
yy ASPAC 2
zz EMEA 2
zz EMEA 1
bb USA 2
预期产出表:P2_Region_Unique
Product_Number Region Forecast Sales
xx LATAM 2 1
yy ASPAC 3 2
zz EMEA 5 3
aa ASPAC 1
bb USA 2
低于代码只考虑GROUP BY两个表,但不是SUM之间:
CREATE TABLE P2_Region_Unique (
Product_Number VARCHAR(100),
Region VARCHAR(13)
);
INSERT INTO P2_Region_Unique
SELECT s.Planning_Hierarchy_2 AS Product_Number, s.Region_Description` AS Region
FROM MI_STAT_TOTAL s
UNION
SELECT m.`Product Number` AS `Product_Number`, m.`Region` AS Region
FROM SALES_TOTAL m;
预期产出表的形式考虑也包括在SUM
CREATE TABLE P2_Region_Unique (
`Product Number` VARCHAR(100),
`Region` VARCHAR(13),
`Forecast` DECIMAL (20,10),
`Sales` DECIMAL (20,10)
);
在MySQL中,你可以把qazxsw POI使用qazxsw POI的qazxsw POI。
您的样本数据表明,你正在处理一个N-M加盟。要做的第一件事是将聚集成子查询,如下所示:
SELECT
这会工作,但不会从该连接两端返回记录。对于这一点,你可以模拟FULL OUTER JOIN(其中,由@Nick指出,没有在MySQL支持)与联合在一起的查询,如:
INSERT
该INSERT ... SELECT
syntax运营商消除跨子查询重复。
这INSERT INTO P2_Region_Unique
SELECT s.product_number, s.region, f.forecast, s.sales
FROM
(
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s
LEFT JOIN (
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f ON f.product_number = s.product_number AND f.region = s.region
GROUP BY s.product_number, s.region
收益率:
INSERT INTO P2_Region_Unique
SELECT s.product_number, s.region, f.forecast, s.sales
FROM
(
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s
LEFT JOIN (
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f ON f.product_number = s.product_number AND f.region = s.region
GROUP BY s.product_number, s.region
UNION
SELECT f.product_number, f.region, f.forecast, s.sales
FROM
(
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f
LEFT JOIN (
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s ON f.product_number = s.product_number AND f.region = s.region
GROUP BY f.product_number, f.region
尝试这个
UNION
对于插入操作
demo on DB Fiddle
如果你的MySQL版本低于8的版本,则
| product_number | region | forecast | sales |
| -------------- | ------ | -------- | ----- |
| aa | ASPAC | 1 | |
| bb | USA | | 2 |
| xx | LATAM | 2 | 1 |
| yy | ASPAC | 3 | 2 |
| zz | EMEA | 5 | 3 |