[英]SQL: Returning Columns of multiple tables and DATEDIFF in minutes
Attempting to retrieve columns from 3 different tables, with the TurnTime's being DATEDIFF's from a 4th table 尝试从3个不同的表中检索列,而TurnTime为第4个表的DATEDIFF
CustomerName, OrderTypeName, LoanNumber, TurnTime1, TurnTime2,TurnTime3, TurnTime4
Tables: 表格:
tblCustomer, tblOrderType, tblOrder, tblOrderActivity, tblActivity
I am running into syntax errors when I place my DATEDIFFs. 放置DATEDIFF时遇到语法错误。 I assume I am doing it very wrong and am trying to get the difference in the times.
我认为我做错了,并试图与时俱进。
The following table is used in tblOrderActivity for DATEDIFF 下表在tblOrderActivity中用于DATEDIFF
tblActivity ActivityID ActivityName
1 Received
2 Keyed
3 Printed
4 Delivered
I want to find the DATEDIFF from 1-2, 2-3, 3-4, 1-4. 我想从1-2、2-3、3-4、1-4中找到DATEDIFF。
ActivityID
and ActivityDate
are in tbl.OrderActivity
ActivityID
和ActivityDate
在tbl.OrderActivity
I attempted to put a (Select DATEDIFF
with the INNERJOIN
of the tables I am desiring to retrieve the dates from, however, it also led to syntax errors. Here is my current code: 我试图在我想要从中检索日期的表的
INNERJOIN
中放置一个(Select DATEDIFF
,但是,这也导致了语法错误。这是我当前的代码:
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
Something like this ? 像这样吗?
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 凯蒂尔
Thanks for your assistance in the final code Ketil. 感谢您对最终代码Ketil的帮助。 Here is the full functioning and working solution to my problem.
这是我的问题的完整功能和工作解决方案。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.