1

我正在尝试从以下 2 个表中创建一个表并遇到很多问题。

表 1 有以下内容:

Month,
Salesperson_Assigned,
Product1_Revenue

表2有以下(不同的产品):

Month,
Salesperson_Assigned,
Product2_Revenue

问题在于,虽然所有月份都相同,但表 1 中有一些销售人员不在表 2 中,反之亦然。显然收入不同。我想加入表格,使其看起来像 Month、Salesperson、Product1_revenue + Product2_revenue。

这是我正在使用的查询:

SELECT
Table1.month,
Table1.salesperson_assigned,
sum(Table1.revenue + Table2.revenue)

FROM
Table1
INNER JOIN Table 2 ON (Table1.month = Table2.month) AND (Table1.salesperson_assigned = Table2.salesperson_assigned)

即使我确认每个单独表格中的收入值是正确的,输出也不正确。对于应为空的字段仅出现在 1 个表中的销售人员,输出似乎构成了附加值。

任何人都对如何正确连接这两个表有任何建议,因此它的行为类似于数据透视表,将唯一值添加到“分配的销售人员”列并添加两列的收入,但是当销售人员仅在一个表中时它尊重收入为零的价值吗?

4

2 回答 2

1

你试过这样吗:

 SELECT
    Table1.month,
    Table1.salesperson_assigned,
    sum(Table1.revenue + Table2.revenue)

    FROM
    Table1 FULL OUTER JOIN Table2 on (Table1.month = Table2.month AND Table1.salesperson_assigned = Table2.salesperson_assigned)
于 2013-09-29T11:59:33.323 回答
1

理想情况下对于这些类型的情况FULL OUTER JOINS很有用 - 但显然 MySQL 不支持FULL OUTER JOINS请参阅: MySQL 中的完全外部连接

更新(不使用右外连接):

create table table1
(month int
,salesperson_assigned int
,Product1_revenue int);

create table table2
(month int
,salesperson_assigned int
,Product2_revenue int);


insert into table1 values(1,10,100);
insert into table1 values(2,10,200);
insert into table1 values(1,11,40);
insert into table1 values(2,11,800);
insert into table1 values(3,11,400);


insert into table2 values(1,10,100);
insert into table2 values(2,10,200);
insert into table2 values(1,12,40);
insert into table2 values(2,12,200);

select 
table1.month
,table1.salesperson_assigned
,ifnull(table1.Product1_revenue,0) as Product1_revenue
,ifnull(table2.Product2_revenue,0) as Product2_revenue
,ifnull(table1.Product1_revenue,0)+ifnull(table2.Product2_revenue,0) as total_revenue
from table1
left outer join table2
on table1.salesperson_assigned=table2.salesperson_assigned and table1.month=table2.month
union 
select 
table2.month
,table2.salesperson_assigned
,ifnull(table1.Product1_revenue,0) as Product1_revenue
,ifnull(table2.Product2_revenue,0) as Product2_revenue
,ifnull(table1.Product1_revenue,0)+ifnull(table2.Product2_revenue,0) as total_revenue
from table2
left outer join table1
on table2.salesperson_assigned=table1.salesperson_assigned  and table1.month=table2.month
order by 2,1;

返回:

Month   salesperson_assigned    Product1_revenue    Product2_revenue    total_revenue
1       10                          100                 100                 200
2       10                          200                 200                 400
1       11                          40                  0                   40
2       11                          800                 0                   800
3       11                          400                 0                   400
1       12                          0                   40                  40
2       12                          0                   200                 200

ps:请考虑发布代码以重现您的数据,以便您获得更快的响应。

于 2013-09-29T12:02:47.370 回答