【问题标题】:Joining two tables and need to have MAX aggregate function in ON clause连接两个表,需要在 ON 子句中有 MAX 聚合函数
【发布时间】:2020-04-21 18:55:16
【问题描述】:

这是我的代码!我想为我的报告提供零件 ID 和采购订单 ID,它会带来所有相关信息以及这些规范。重要的是,如果我们有相同的采购订单 ID 和零件 ID,我们需要代码返回具有最高交易 ID 的结果。以下代码没有提供我所期望的。你能帮帮我吗?

SELECT MAX(INVENTORY_TRANS.TRANSACTION_ID), INVENTORY_TRANS.PART_ID
, INVENTORY_TRANS.PURC_ORDER_ID, TRACE_INV_TRANS.QTY, TRACE_INV_TRANS.CREATE_DATE, TRACE_INV_TRANS.TRACE_ID
FROM INVENTORY_TRANS    
JOIN TRACE_INV_TRANS ON INVENTORY_TRANS.TRANSACTION_ID = TRACE_INV_TRANS.TRANSACTION_ID    
WHERE INVENTORY_TRANS.PART_ID = @PartID 
    AND INVENTORY_TRANS.PURC_ORDER_ID = @PurchaseOrderID    
GROUP BY TRACE_INV_TRANS.QTY, TRACE_INV_TRANS.CREATE_DATE, TRACE_INV_TRANS.TRACE_ID, INVENTORY_TRANS.PART_ID
, INVENTORY_TRANS.PURC_ORDER_ID

trace_inventory_trans 表的示例是:

part_id   trace_id    transaction id     qty       create_date     
x           1             10
x           2             11
x           3             12

inventory_trans 表的示例是:

transaction_id     part_id     purc_order_id
11                 x            p20
12                 x            p20

我想获得最大交易的结果,即交易 12,但它显示了交易 11

【问题讨论】:

  • 样本数据和预期结果会有所帮助。
  • 结果没有应用最大条件。
  • 是的,但您需要向我们展示数据样本、上述查询的结果以及您想要的预期结果。
  • 我在问题的末尾添加了
  • 结果中是否需要TRACE_INV_TRANS.TRACE_ID?如果不从SelectGroup By 中删除它。每行的Qty 是否相同?每行的TRACE_INV_TRANS.CREATE_DATE 是否相同?您忽略了显示这些要回答的问题的完整样本数据。

标签: sql-server sqlreportingservice


【解决方案1】:

我会使用子查询来查找 MAX 值,然后将该结果连接到另一个表。

ORDER BY + TOP (1)transaction_id 返回 MAX 值。

SELECT 
   inv.transaction_id
  ,inv.part_id
  ,inv.purc_order_id
  ,tr.qty
  ,tr.create_date
  ,tr.trace_id
FROM 
  (
    SELECT TOP (1)
      transaction_id,
      part_id,
      purc_order_id
    FROM 
      INVENTORY_TRANS
    WHERE 
      part_id = @PartID
      AND 
      purc_order_id = @PurchaseOrderID
    ORDER BY 
      transaction_id DESC
  ) AS inv
JOIN 
  TRACE_INV_TRANS AS tr
    ON inv.transaction_id = tr.transaction_id;

结果:

+----------------+---------+---------------+------+-------------+----------+
| transaction_id | part_id | purc_order_id | qty  | create_date | trace_id |
+----------------+---------+---------------+------+-------------+----------+
|             12 | x       | p20           | NULL | NULL        |        3 |
+----------------+---------+---------------+------+-------------+----------+

Rextester Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2013-07-27
    相关资源
    最近更新 更多