2017-09-14 64 views
-1

我有两个表,SalesReturns。他们有CustomerID,ProductCode,Name,SalesDate,SalesWeek,SalesAmount和ReturnsDate,ReturnsWeek,ReturnsAmount。我真正想要做的就是加入这些表格并将它们堆叠在一起,这样客户就可以在销售和退货的单个报表中获得数据。从两个不同日期的表中堆叠数据

销售和退货日期不同,但产品代码,客户ID和名称可以与输出表中的记录相同。例如,客户A在上个月购买了产品并在下个月将其返回,因此他的记录可能会出现在退货表中。

为了实现这一点,我尝试使用联合通过选择两个表之间的所有列,但我得到了销售和返回没有一致性的记录组合。我想要做的就是查看没有退货业务的客户的空值,反之亦然。我在这种情况下认为Left Join应该可以工作,但它不起作用。所以我看到所有列中的数据混合了销售和退货金额。附加的是有两张桌子的照片,我看到的输出和我想看到的输出。另外,我正在执行“每周总计”以获取销售和退货金额。什么是实现这一目标的最好和最简单的方法?我很抱歉,我可能已经不规整我的问题正常,但图像可能会帮助#NewToSQL

enter image description here

+0

推测客户可以多次购买给定产品。 –

回答

1

据推测,客户可以购买指定产品超过一次。如果是这样,一个full join是正确的解决方案,但你需要多一点的逻辑,以确保不重复的结果:

select . . . 
from (select s.*, 
      row_number() over (partition by product_code, customer_id order by (select NULL)) as seqnum 
     from sales s 
    ) s full join 
    (select r.*, 
      row_number() over (partition by product_code, customer_id order by (select NULL)) as seqnum 
     from returns r 
    ) r 
    on s.product_code = r.product_code and s.customer_id = r.customer_id; 

我离开出了名的,因为我认为它是由客户ID定义。

+0

虽然我了解您提供的逻辑,但我想强调两个表中的产品代码不同,例如,我希望看到所有销售产品代码,并且它们可能出现在退货中,可能不是。因此,在选择如何从两个表中将所有产品代码选择到输出的一列中? – Sanj

+0

如何使用上述逻辑,但同时使用两个表中的列(销售和退货的产品代码)输出到报表中? – Sanj

0

你需要做的,你提到的那些列与收益表中的FULL JOIN销售表。

喜欢的东西:

SELECT * 
FROM sales s 
FULL JOIN returns r 
ON s.product_code = r.product_code 
AND s.customerid = r.customer_id 
相关问题