大家好,我的sql代码有一个小问题 我只需要在2008年8月的数据库中显示数据。
到目前为止,我的代码是我应该在2008年8月显示每个销售人员的销售额
SELECT p.BusinessEntityID,p.FirstName,p.LastName,ROUND(SUM(soh.TotalDue),2)AS'Total Attributed Sales' 来自Person.Person p,Sales.SalesPerson s,Sales.SalesOrderHeader soh 在哪里p.BusinessEntityID = s.BusinessEntityID AND p.BusinessEntityID = soh.SalesPersonID AND soh.OrderDate> ='2008'和soh.OrderDate< '2009' GROUP BY p.BusinessEntityID,P.FirstName,P.LastName ORDER BY p.LastName
我有我的数据库的图像
http://www.2shared.com/photo/h2-jMQyP/AdventureWorks2008.html
答案 0 :(得分:2)
你可以试试这个:
SELECT DISTINCT p.BusinessEntityID,p.FirstName,p.LastName
FROM Person.Person p INNER JOIN Sales.SalesPerson s
ON p.BusinessEntityID = s.BusinessEntityID
WHERE MONTH(p.your_date) = 8
AND YEAR(p.your_date) = 2008
请注意:当您必须加入表格时,请使用JOIN
语句代替WHERE
; sql引擎在这里理解你正在加入表并将执行计划转换为使用JOIN
,但在其他情况下你冒着表笛卡尔产品的风险,使你的查询真的很大!
答案 1 :(得分:1)
查看您的数据库结构,如果您想获得特定人员的销售额,您可能还需要添加一个指向SalesOrderHeader的链接
编辑2:稍微修改一下脚本将获得2008年8月所有销售人员的所有销售额的总额。
SELECT p.BusinessEntityID,p.FirstName,p.LastName, SUM(soh.TotalDue)
FROM Person.Person p , Sales.SalesPerson s,Sales.SalesOrderHeader soh
WHERE p.BusinessEntityID = s.BusinessEntityID
AND s.BusinessEntityID = soh.BusinessEntityID
AND MONTH(soh.OrderDate) = 8
AND YEAR(soh.OrderDate) = 2008
GROUP BY p.BusinessEntityID