2016-04-15 104 views
-3

我有兩個表,我有困難。 OrderHed & UD11。 OrderHed對於OrderNum = 70960有1個值,但UD11對於70960有4個記錄。用MAX(列值)選擇行,DISTINCT用SQL中的另一列

我試圖將UD11.Key5的最大值作爲不同的記錄返回 - 我做錯了什麼?

謝謝!

SELECT TOP (100) PERCENT OrderHed.OrderNum, 
    OrderHed.OpenOrder, 
    OrderHed.OrderDate, 
    OrderRel.Plant, 
    OrderHed.EntryPerson, 
    OrderHed.Company, 
    Erp.Customer.CustID, 
    Erp.Customer.NAME, 
    Erp.InvcDtl.InvoiceNum, 
    SUM(OrderDtl.ExtPriceDtl) AS Expr1, 
    OrderHed.PONum, 
    Ice.UD11.Key1, 
    Ice.UD11.Key2, 
    Ice.UD11.Key3, 
    Ice.UD11.Key4, 
    MAX(Ice.UD11.Key5) AS Expr2, 
    Ice.UD11.Character01, 
    Ice.UD11.Number01, 
    Ice.UD11.Date01, 
    Ice.UD11.Date02, 
    Ice.UD11.Date03, 
    Ice.UD11.ShortChar01, 
    Ice.UD11.ShortChar02, 
    Ice.UD11.ShortChar03, 
    Ice.UD11.ShortChar04, 
    Ice.UD11.ShortChar05, 
    OrderHed.OrderComment 
FROM Erp.Customer 
RIGHT JOIN Ice.UD11 
RIGHT JOIN Erp.OrderHed AS OrderHed ON Ice.UD11.Company = OrderHed.Company 
    AND Ice.UD11.Key1 = OrderHed.OrderNum 
LEFT JOIN Erp.OrderRel AS OrderRel 
RIGHT JOIN Erp.OrderDtl AS OrderDtl ON OrderRel.Company = OrderDtl.Company 
    AND OrderRel.OrderNum = OrderDtl.OrderNum 
    AND OrderRel.OrderLine = OrderDtl.OrderLine ON OrderHed.Company = OrderDtl.Company 
    AND OrderHed.OrderNum = OrderDtl.OrderNum ON Erp.Customer.Company = OrderHed.Company 
    AND Erp.Customer.CustNum = OrderHed.CustNum LEFT JOIN Erp.InvcDtl RIGHT JOIN Erp.ShipDtl ON Erp.InvcDtl.Company = Erp.ShipDtl.Company 
    AND Erp.InvcDtl.OrderNum = Erp.ShipDtl.OrderNum 
    AND Erp.InvcDtl.OrderLine = Erp.ShipDtl.OrderLine 
    AND Erp.InvcDtl.OrderRelNum = Erp.ShipDtl.OrderRelNum ON OrderRel.Company = Erp.ShipDtl.Company 
    AND OrderRel.OrderNum = Erp.ShipDtl.OrderNum 
    AND OrderRel.OrderLine = Erp.ShipDtl.OrderLine 
    AND OrderRel.OrderRelNum = Erp.ShipDtl.OrderRelNum GROUP BY OrderHed.OrderNum, 
    OrderHed.OrderDate, 
    OrderRel.Plant, 
    OrderHed.EntryPerson, 
    OrderHed.Company, 
    OrderHed.OpenOrder, 
    Erp.Customer.CustID, 
    Erp.Customer.NAME, 
    Erp.InvcDtl.InvoiceNum, 
    OrderHed.PONum, 
    Ice.UD11.Key1, 
    Ice.UD11.Key2, 
    Ice.UD11.Key3, 
    Ice.UD11.Key4, 
    Ice.UD11.Character01, 
    Ice.UD11.Number01, 
    Ice.UD11.Date01, 
    Ice.UD11.Date02, 
    Ice.UD11.Date03, 
    Ice.UD11.ShortChar01, 
    Ice.UD11.ShortChar02, 
    Ice.UD11.ShortChar03, 
    Ice.UD11.ShortChar04, 
    Ice.UD11.ShortChar05, 
    OrderHed.OrderComment HAVING (OrderHed.Company = N'011') 
    AND (Erp.InvcDtl.InvoiceNum IS NULL) 
    AND (OrderHed.OrderNum = 70960) 

回答

1
SELECT * 
FROM (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY OrderNum ORDER BY key5 DESC) rn 
     FROM (... /* my huge query */) q 
     ) q 
WHERE rn = 1 
+0

所以我希望把另一個SELECT語句裏面我FROM語句? – Machzy

+0

@Machzy:是的,把你的整個查詢放在parens裏面,別忘了別名(關閉paren後的'q') – Quassnoi