2017-06-16 71 views
0

我正在使用SQL Server 2014,并且查询出现问题。在SQL Server 2014中查询报表(我需要表中的最后一行)

enter image description here

我想在我的报告,已交付使用ID_Order = 9订单的所有项目。对于已经交付两次的商品(例如商品代码= Art3),我只想要最后一行,这意味着此商品的最后一次交付,没有重复。

我已经尝试过这两个查询没有成功:

尝试#1:DISTINCT

SELECT DISTINCT 
    Order.ItemCode, Delivery. Qty, Delivery.ID_Delivery, 
    Order.ID_Order 
FROM 
    Delivery 
INNER JOIN 
    Order ON Order.ID_Order = Delivery.ID_Order 
WHERE 
    Order.ID_Order = '9' 

尝试#2:子查询

SELECT * 
FROM 
    (SELECT 
     Order.ItemCode, Delivery.Qty, 
    FROM 
     Delivery 
    INNER JOIN 
     Order ON Order.ID_Order = Delivery.ID_Order 
    WHERE 
     Order.ID_Order = '9') 
GROUP BY 
    a.ItemCode, a.Qty 
+0

我无法理解为什么你要为'id_delivery = 23'放弃'ar2'。这是什么条件。你的要求是什么? –

+0

选择最后一次交货的标准是什么?在什么基础上可以告诉最后一次交货? –

+0

或者如果你只是想要的结果,然后只是在'id_order,itemcode'和'select max(id_Delivery),max(qty),其他列'上进行分组。 –

回答

0

尝试此查询 -

;WITH CTE 
AS (
    SELECT C.ID_Order 
     ,D.ID_Delivery 
     ,C.ItemCode 
     ,C.Quantity 
     ,ROW_NUMBER() OVER (
      PARTITION BY C.ItemCode ORDER BY D.ID_Delivery DESC 
      ) AS RowNum 
    FROM Customer_Order C 
    INNER JOIN Delivery D ON C.ID_Order = D.ID_Order 
     AND C.ItemCode = D.ItemCode 
    WHERE C.ID_Order = 9 
    ) 
SELECT ID_Order 
    ,ID_Delivery 
    ,ItemCode 
    ,Quantity 
FROM CTE 
WHERE RowNum = 1 
0
SELECT 
    Order.ItemCode, Delivery. Qty, Delivery.ID_Delivery, 
    Order.ID_Order 
FROM 
    Delivery 
INNER JOIN 
    Order ON Order.ID_Order = Delivery.ID_Order 
WHERE 
    Order.ID_Order = '9' 
AND Delivery.ID_Delivery IN 
(
SELECT MAX(ID_Delivery) FROM Delivery D WHERE D.ID_Order = Delivery.ID_Order GROUP BY D.ID_Order 
) 

我希望它能为你工作。