【问题标题】:How do I merge information without duplicates?如何在不重复的情况下合并信息?
【发布时间】:2020-01-10 17:08:13
【问题描述】:

我有 4 个如下所示的表:第一个表“订单”

orderNumber  orderDate   requiredDate  shippedDate   status     comments   customerNumber
10166        21/10/2003  30/10/2003    27/10/2003    Shipped    NULL       462
10321        4/11/2004   12/11/2004    7/11/2004     Shipped    NULL       462
10167        23/10/2003  30/10/2003                  Cancelled  Cancelled  448
10291        8/9/2004    12/9/2004     14/9/2004     Shipped    NULL       448

第二张表'OrderDetails'

orderNumber  productCode  quantityOrdered  priceEach  orderLineNumber
10166        s18_1234     43               136        1
10166        s18_1235     26               72         2
10321        s18_4524     19               5          1
10321        s18_4522     14               5          2
10167        s18_1662     34               102        1
10167        s18_4757     12               67         2
10291        s18_3894     10               67         1
10291        s18_3515     50               67         2

第三张表“付款”

customerNumber  checkNumber  paymentDate  amount
462             JM555205     8/11/2003    7720
462             PW176846     27/11/2004   165
448             AZ384638     30/9/2004    4020

第四张表'客户'

customerNumber CustomerName
462            Gregg
448            Bryan

通过这 4 个表,我希望提出一个 SQL 语句,可以显示 orderNumber、该订单的总付款、状态和收到的金额。如下表所示,用于跟踪客户仍欠/取消的金额以及已收到的金额。

orderNumber  totalAmount  status     amountReceived
10166        7720         Shipped    7720
10321        165          Shipped    165
10167        4272         Cancelled  0
10291        4020         Shipped    4020

有点长的问题,感谢任何回复。非常感谢

【问题讨论】:

  • 您忘记了您尝试的 SQL。
  • 作为人类,您将如何针对订单/订单行进行付款?这些表之间没有键,因此需要提供一些逻辑,例如“我将支票金额应用于支票日期之前发生的最旧的未付款订单行项目”

标签: sql


【解决方案1】:

像这样的东西可以吗 - 我只用了 5 分钟就完成了,还没有完全看透它,但可以作为你的起始模板。

SELECT 
      ordr.orderNumber, 
      sum(pts.Amount) as [Total Amount], 
      ordr.status, 
      sum(ordrDet.quantityOrdered * ordrDet.priceEach) as [Amount Recieved],
      sum(pts.Amount - (ordrDet.quantityOrdered * ordrDet.priceEach)) as [Amount Owed]
FROM Orders ordr
             LEFT JOIN OrderDetails ordrDet on ordr.orderNumber = ordrDet.orderNumber
             LEFT JOIN Payment pts on pts.customerNumber = ordr.customerNumber
GROUP BY ordr.orderNumber, ordr.status

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多