Sql 从两个日期不同的表中叠加数据

Sql 从两个日期不同的表中叠加数据,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表,销售和退货。它们有CustomerID、ProductCode、Name、SalesDate、SalesWeek、SalesAmount和ReturnsDate、ReturnsWeek、ReturnsAmount。我真正想做的是将这些表连接起来,并将它们堆叠在一起,这样客户机就可以在一个报告中包含销售和退货数据 销售和退货日期不同,但输出表中的记录的产品代码、客户ID和名称可以相同。例如,客户A上个月购买了一个产品,下个月退回,所以他的记录可以出现在退货表中 为了实现这一点,我尝试通

我有两个表,
销售
退货
。它们有CustomerID、ProductCode、Name、SalesDate、SalesWeek、SalesAmount和ReturnsDate、ReturnsWeek、ReturnsAmount。我真正想做的是将这些表连接起来,并将它们堆叠在一起,这样客户机就可以在一个报告中包含销售和退货数据

销售和退货日期不同,但输出表中的记录的产品代码、客户ID和名称可以相同。例如,客户A上个月购买了一个产品,下个月退回,所以他的记录可以出现在退货表中

为了实现这一点,我尝试通过选择两个表之间的所有列来使用union,但我得到的是销售和退货的混合记录,没有一致性。我想做的就是看到那些没有退货业务的客户为空,反之亦然。我在想左撇子在这个案子中应该有用,但它不起作用。因此,我在销售和退货金额的所有列中都看到了混淆的数据。附件是有两个表的图片,我看到的输出和我想看到的输出。此外,我还每周汇总销售和退货金额。实现这一目标的最佳和最简单的方法是什么?很抱歉,我可能没有正确地组织我的问题,但图片可能会有所帮助


您需要在您提到的列上创建一个包含退货表的完整连接销售表

比如:

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

据推测,客户可以多次购买给定的产品。如果是这样的话,
完全连接
是正确的解决方案,但您需要更多的逻辑来确保结果不重复:

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定义的。

假设客户可以多次购买给定的产品。虽然我理解您提供的逻辑,但我想强调一个事实,即两个表中的产品代码是不同的,例如,我想查看所有销售产品代码,它们可能存在于退货中,也可能不存在。那么在“选择”中,如何在输出时将两个表中的所有产品代码选择到一列中?如何使用上述逻辑,但同时使用两个表中的两列(销售和退货中的产品代码)输出到报告中?