2013-05-16 47 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; 
相關問題