2012-11-14 25 views
1

这是我目前的表格。从DATEDIFF获得平均值来自相同ID号码的结果

enter image description here

员工将有多个订单日期,发货日期。我想要得到的是每位员工差异总和的平均值。

一直在努力如何实现这一目标。

这是我迄今为止所做的。

USE Northwind 

SELECT 
    e.EmployeeID, 
    e.LastName, 
    o.OrderDate, 
    o.ShippedDate, 
    DATEDIFF(DAY, o.OrderDate, o.ShippedDate) as Diff 
FROM 
    Employees as e 
    JOIN Orders as o ON e.EmployeeID = o.EmployeeID 
+0

谢谢米奇!我正在编辑帖子,然后你就放弃了。 – ocinisme

回答

4
SELECT 
    e.EmployeeID, 
    AVG(CAST(DATEDIFF(DAY, o.OrderDate, o.ShippedDate) as float)) as AvgDiff 
FROM 
    Employees as e 
    JOIN Orders as o ON e.EmployeeID = o.EmployeeID 
Group By e.EmployeeID 

如果你想在结果集中比EmployeeId多,加入背像这样:

select 
    e.EmployeeId 
    e.LastName, 
    a.AvgDiff 
From 
    Employees as e 
Join  (SELECT 
       e.EmployeeID, 
       AVG(CAST(DATEDIFF(DAY, o.OrderDate, o.ShippedDate) as float)) as AvgDiff 
      FROM 
       Employees as e 
       JOIN Orders as o ON e.EmployeeID = o.EmployeeID 
      Group By e.EmployeeID) a ON a.EmployeeId = e.EmployeeId 
+0

这将排除所有NULL行,我说得对吗?谢谢你的帮助! – ocinisme

3
SELECT 
    e.EmployeeID, 
    e.LastName, 
    AVG(1.0 * DATEDIFF(DAY, o.OrderDate, o.ShippedDate)) as AVGDiff 
FROM 
    Employees as e 
    JOIN Orders as o ON e.EmployeeID = o.EmployeeID 
Group by e.EmployeeID, e.LastName 
Order by e.EmployeeID, e.LastName 
相关问题