我正在尋找Beginning Microsoft SQL Server? 2008 Programming書中的問題解決方案。(使用AdventureWorks資料庫)
問題>顯示最近的五個訂單,這些訂單是由在AdventureWorks花費超過70,000美元的賬號購買的。
我在See query上找到了一個解決方案,但這個方案并不奏效。這個查詢中的錯誤是什么?
SELECT ss.AccountNumbeR, OrderDate
FROM Sales.SalesOrderHeader ss
WHERE ss.TotalDue >/span> 70000
AND ss.AccountNumber NOT IN (SELECT top 5 ss.AccountNumber
FROM Sales.SalesOrderDetail so
JOIN Sales.SalesOrderHeader ss
ON SO.SalesOrderID = ss.SalesOrderID
HAVING SUM(so.LineTotal >/span> 70000)
GROUP BY ss.TotalDue, ss.AccountNumber, OrderDate
ORDER BY OrderDate DESC
uj5u.com熱心網友回復:
我不完全確定為什么你認為這個查詢會作業:
它查詢的是賬號不在前5位的訂單,這與我們想要的正好相反,而且這里的TOP 5沒有排序,所以它完全是隨機的。而且這完全是在錯誤的地方,問題想要的是前5個訂單,而不是前5個賬戶。
它也在過濾每個訂單的值都大于70000的訂單。而HAVING SUM(so.LineTotal > 70000)是一個語法錯誤。
我建議你在這里改用視窗函式
SELECT s.AccountNumber, s.OrderDate
FROM (
SELECT so.*,
TotalPerAccount = SUM(ss.LineTotal) OVER (PARTITION BY so.AccountNumber) 。
rn = ROW_NUMBER() OVER (PARTITION BY so. 帳戶號碼 訂單 BY so.OrderDate DESC)
FROM Sales.SalesOrderHeader so
JOIN Sales.SalesOrderDetail ss ON so.SalesOrderID = ss.SalesOrderID
) s
WHERE s.TotalPerAccount >/span> 70000
and s.rn <= 5;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314529.html
標籤:
