2014-12-13 66 views
-1

我有以下表格:轉換嵌套MY_SQL查詢到一個視圖查詢

CashiersInShifts(ShiftNun,ShiftDAte,CashierNum), 
Oreders(OrderNum,Payment,CustomerNum,ShiftNum,ShiftDAte,CashierNum), 
Course(CourseNum,Name,Price), 
CourseInOrder(OrderNum,CourseNum,Quantity), 
Employee(EmployeeNum,Name,BirthDay). 

我想下面的查詢轉換:

SELECT EmployeeNum, Name, MAX(TotalSales)/10 AS Commission 
FROM (SELECT OrderNum, CS.ShiftDate, CS.CashierNum AS EmployeeNum, CO.CourseNum, C.Price, SUM(C.Price) AS TotalSales 
FROM CashiersInShifts CS NATURAL JOIN Orders O NATURAL JOIN CoursesInOrder CO NATURAL JOIN Course C 
WHERE CS.ShiftDate = DATE_SUB(CURDATE(),INTERVAL 1 DAY) 
GROUP BY CS.CashierNum) T1 NATURAL JOIN Employee; 

一個視圖查詢。 感謝您的幫助

+1

請仔細閱讀[提問]:這真的很難理解你寫的......你可以把你的代碼中正確的語法,所以我們可以讀你的代碼... – mithrop 2014-12-13 12:28:17

+0

格式的問題,並提供足夠的詳細信息,如果您需要幫幫我。 – user3806613 2014-12-13 12:29:11

回答

1

您可以使用SELECT中的相關子查詢來做到這一點。如果你想避免疏忽造成的錯誤是好得多知道你是加盟的欄目, - 我勸你不要使用natural join。然而,你的問題是關於您的查詢,所以我離開natural join在:

SELECT e.EmployeeNum, e.Name, 
     (SELECT SUM(C.Price) AS TotalSales 
     FROM CashiersInShifts CS NATURAL JOIN 
      Orders O NATURAL JOIN 
      CoursesInOrder CO NATURAL JOIN 
      Course C 
     WHERE CS.ShiftDate = DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND 
       CS.CaashierNum = e.EmployeeNum 
     ORDER BY TotalSales DESC 
     LIMIT 1 
     )/10 as Commission 
FROM Employee e; 

注意,這將返回行的所有員工。如果您想限制員工僅限收銀員,您可以添加HAVING Commission IS NOT NULL

+0

非常感謝!如果我只想要最高佣金的收銀員?我需要做什麼? – user3590789 2014-12-13 15:26:31

+0

'按佣金desc'的順序,然後用'limit'選擇你想要的數字。 – 2014-12-13 20:58:47

+0

但我不知道提前多少收銀員都會有相同的佣金...我怎麼可以限制我的結果?我需要用最大佣金收銀員,如果有10個收銀員用相同的最高佣金,我需要所有10個收銀員在我的結果 – user3590789 2014-12-14 09:06:44