【问题标题】:Join two tables with additional field in one table [duplicate]将两个表与一个表中的附加字段连接起来[重复]
【发布时间】:2019-03-04 14:49:09
【问题描述】:

我想将两个带有附加列的表连接在一起。

第一个表是按产品发送的产品数量

** Table 1 - Despatches **      
Month   ProductID   No_despatched
Jan     abc          10
Jan     def          15
Jan     xyz          12

第二个表是按产品退回的产品数量,也是按退货原因的附加列

** Table 2 - Returns **     
Month   ProductID   No_returned  Return_reason
Jan     abc          2             Too big
Jan     abc          3             Too small
Jan     xyz          1            Wrong colour

如果同一产品有多个退货原因,我想加入表格以在同一行显示退货和发货,并且发货数量重复。

** Desired output **
Month   ProductID   No_despatched   No_returned   Return_reason
Jan     abc               10              2         Too big
Jan     abc               10              3         Too small
Jan     xyz               12              1         Wrong colour

希望这是有道理的......

提前致谢!

afk

【问题讨论】:

  • 表格有,而不是字段。
  • def 发生了什么事?
  • 人们会认为这样的问题会作为重复而被关闭,而不是从有很多声誉的人那里得到答案

标签: sql sql-server tsql join


【解决方案1】:

这似乎是一个基本的JOIN

select r.month, r.productid, d.no_despathed, r.no_returned, r.return_reason
from returns r join
     despatches d
     on r.month = d.month and r.productid = d.productid;

结果似乎不是特别有用,因为缺少一些产品(那些没有退货的产品)。如果有多个退货记录,则金额会重复。

【讨论】:

  • 感谢您的回复和您提出的好观点。例如,您认为计算回报率的最佳方法是什么?我认为最好在同一张表中包含多个发货和退货(假设现在我还包括未退货的产品)有没有更好的方法来解决这个问题?
  • @afk 。 . .这个问题没有提到“回报率”——它有几个答案。用适当的样本数据和期望的结果提出一个新的问题,解释“回报率”的含义。请勿编辑此问题,因为您将使试图帮助您的人的答案无效。
【解决方案2】:

只需使用连接

  select a.*,b.No_returned,.Return_reason from
   table1 join table2 on a.ProductID=b.ProductID 
                            and a.month=b.month

如果重复,您可以使用distinct

【讨论】:

    【解决方案3】:

    更改问题中子句的顺序会产生结果。

    带有额外的列。

    SELECT Table1.Month, Table1.ProductID, Table1.NoDespatched, Table2.NoReturned, Table2.ReturnReason
    

    连接两个表

    FROM Table1 LEFT JOIN Table2 
      ON Table1.Month=Table2.Month AND Table1.ProductID=Table2.ProductID
    

    我们使用LEFT JOIN 是因为,假设产品可以在不退回的情况下发送,但没有人可以退回您未发送的产品。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2013-07-08
      • 2016-06-16
      相关资源
      最近更新 更多