2017-06-16 70 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 
) 

我希望它能爲你工作。