2013-05-16 130 views
0
多个表和DATEDIFF的回归列

尝试获取来自3个不同的表中的列,与TurnTime的存在DATEDIFF的从第4个表SQL:以分钟为单位

CustomerName, OrderTypeName, LoanNumber, TurnTime1, TurnTime2,TurnTime3, TurnTime4

表:

tblCustomer, tblOrderType, tblOrder, tblOrderActivity, tblActivity

我在放置DATEDIFF时遇到语法错误。我认为我做得非常错误,并试图在时代中取得不同。

下表是在tblOrderActivity用于DATEDIFF

tblActivity  ActivityID    ActivityName 
         1      Received 
         2      Keyed 
         3      Printed 
         4      Delivered 

我想从1-2,2-3,3-4,1-4找到DATEDIFF。 ActivityIDActivityDatetbl.OrderActivity

我试图把(Select DATEDIFF与我渴望检索日期表的INNERJOIN,但是,它也导致了语法错误。 这是我目前的代码:

SELECT 
dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber, 
dbo.tblOrderActivity.ActivityDate, 
DATEDIFF(MINUTE, ActivityID=1, ActivityID=2) AS TurnTime1, 
DATEDIFF(MINUTE, ActivityID=2, ActivityID=3) AS TurnTime2, 
DATEDIFF(MINUTE, ActivityID=3, ActivityID=4) AS TurnTime3, 
DATEDIFF(MINUTE, ActivityID=1, ActivityID=4) AS TurnTime4 
FROM  
dbo.tblOrder 
INNER JOIN 
    dbo.tblCustomer ON dbo.tblOrder.CustomerID = dbo.tblCustomer.CustomerID 
INNER JOIN 
    dbo.tblOrderActivity ON dbo.tblOrder.OrderID = dbo.tblOrderActivity.OrderID AND 
    dbo.tblOrder.OrderID = dbo.tblOrderActivity.OrderID 
INNER JOIN 
    dbo.tblActivity ON dbo.tblOrderActivity.ActivityID = dbo.tblActivity.ActivityID 
INNER JOIN 
    dbo.tblOrderType ON dbo.tblOrder.OrderTypeID = dbo.tblOrderType.OrderTypeID 


ORDER BY dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber 

回答

0

这样的事情?

SELECT 
dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber, 
a1.ActivityDate, 
DATEDIFF(MINUTE, a1.ActivityDate, a2.ActivityDate) AS TurnTime1, 
DATEDIFF(MINUTE, a2.ActivityDate, a3.ActivityDate) AS TurnTime2, 
DATEDIFF(MINUTE, a3.ActivityDate, a4.ActivityDate) AS TurnTime3, 
DATEDIFF(MINUTE, a1.ActivityDate, a4.ActivityDate) AS TurnTime4 
FROM  
dbo.tblOrder 
INNER JOIN 
    dbo.tblCustomer ON dbo.tblOrder.CustomerID = dbo.tblCustomer.CustomerID 
INNER JOIN 
    dbo.tblOrderActivity a1 ON dbo.tblOrder.OrderID = a1.OrderID and a1.activityid = 1 
INNER JOIN 
    dbo.tblOrderActivity a2 ON dbo.tblOrder.OrderID = a2.OrderID and a1.activityid = 2 
INNER JOIN 
    dbo.tblOrderActivity a3 ON dbo.tblOrder.OrderID = a3.OrderID and a1.activityid = 3 
INNER JOIN 
    dbo.tblOrderActivity a4 ON dbo.tblOrder.OrderID = a4.OrderID and a1.activityid = 4 
INNER JOIN 
    dbo.tblOrderType ON dbo.tblOrder.OrderTypeID = dbo.tblOrderType.OrderTypeID 
ORDER BY dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber 

Ketil

+0

这似乎执行,但没有任何列的行被返回 – Brody

0

感谢您对最终代码Ketil您的帮助。 下面是我的问题的全面运作和工作解决方案。

SELECT 
dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber, 
DATEDIFF(MINUTE, a1.ActivityDate, a2.ActivityDate) AS [TurnTime1], 
DATEDIFF(MINUTE, a2.ActivityDate, a3.ActivityDate) AS [TurnTime2], 
DATEDIFF(MINUTE, a3.ActivityDate, a4.ActivityDate) AS [TurnTime3], 
DATEDIFF(MINUTE, a1.ActivityDate, a4.ActivityDate) AS [TurnTime4] 
FROM  
dbo.tblOrder 
LEFT OUTER JOIN 
dbo.tblCustomer ON dbo.tblOrder.CustomerID = dbo.tblCustomer.CustomerID 
LEFT OUTER JOIN 
dbo.tblOrderActivity a1 ON dbo.tblOrder.OrderID = a1.OrderID and a1.ActivityID = 1 
LEFT OUTER JOIN 
dbo.tblOrderActivity a2 ON dbo.tblOrder.OrderID = a2.OrderID and a2.ActivityID = 2 
LEFT OUTER JOIN 
dbo.tblOrderActivity a3 ON dbo.tblOrder.OrderID = a3.OrderID and a3.ActivityID = 3 
LEFT OUTER JOIN 
dbo.tblOrderActivity a4 ON dbo.tblOrder.OrderID = a4.OrderID and a4.ActivityID = 4 
INNER JOIN 
dbo.tblOrderType ON dbo.tblOrder.OrderTypeID = dbo.tblOrderType.OrderTypeID 
ORDER BY dbo.tblCustomer.CustomerName, dbo.tblOrderType.OrderTypeName, dbo.tblOrder.LoanNumber, a1.ActivityDate; 
相关问题