2012-03-27 146 views
1

我正在做一些練習練習,並有一個小問題與我的查詢。 我的初始代碼如下。問題是我在最後一欄中得到了錯誤答案/需要基本的SQL查詢幫助

問題:查詢2008年所有SalesOrders的銷售人員總銷售額的總查詢。使用訂單的TotalDue查找銷售額以及SalesPersonID來查找要歸因的銷售人員。例如。的SalesOrderID 43659應歸功於SalesPersonID 279

SELECT DISTINCT p.BusinessEntityID,p.FirstName,p.LastName, t.TotalDue 
    FROM Person.Person p,Sales.SalesPerson s,Sales.SalesOrderHeader t 
    WHERE p.BusinessEntityID = s.BusinessEntityID 

這裏是我的ERD http://www.2shared.com/photo/h2-jMQyP/AdventureWorks2008.html的形象。

+0

如果可能的話,請用後期望的結果一些示例數據..所以,這將有助於正確地說,查詢.. :) – 2012-03-27 05:51:11

+0

既然你正在學習,至少正確學習,永遠不要使用隱式聯接。他們是一個非常糟糕的編程技術。 – HLGEM 2012-03-27 19:08:43

回答

0

,如果你想totaldue在2008年,你必須給一個條件,今年部分

SELECT DISTINCT p.BusinessEntityID,p.FirstName,p.LastName, t.TotalDue 
FROM Person.Person p,Sales.SalesPerson s,Sales.SalesOrderHeader t 
WHERE p.BusinessEntityID = s.BusinessEntityID 
and year(date_column) = '2008' 
+0

我仍然沒有得到銷售列錯誤這是我有 SELECT p.BusinessEntityID,p.FirstName,p.LastName,s.TotalDueFROM Person.Person p,Sales.SalesOrderHeader sWHERE p.BusinessEntityID = s.SalesPersonID AND年(OrderDate)='2008';. – 2012-03-27 04:16:27

+1

我認爲這個查詢在'Person' /'SalesPerson'和'SalesOrderHeader'之間返回一個笛卡爾乘積。這是因爲「SalesOrderHeader」表沒有連接條件。 – GolfWolf 2012-03-27 14:43:49

+0

-1用於隱式聯接的用戶,並且不識別意外交叉聯接作爲結果。 – HLGEM 2012-03-27 19:10:42

1

這看起來像使用GROUP BY條款的理想的例子。

嘗試以下查詢:

select p.BusinessEntityID, p.FirstName, p.LastName, sum(t.TotalDue) as TotalDue 
from Person.Person p 
join Sales.SalesPerson s on p.BusinessEntityID = s.BusinessEntityID 
join Sales.SalesOrderHeader t on t.BusinessEntityID = s.BusinessEntityID 
where year(t.OrderDate) = 2008 
group by p.BusinessEntityID, p.FirstName, p.LastName