我有一个访问查询,它接受启动和停止,并在几分钟内返回运行时间,然后根据运行时间在几分钟内计算运行时间:
用于检索以下结果的访问查询部分是:
[Net Weight Tracking].[Start Time], [Net Weight Tracking].[Stop Time],
Hour([start time]) AS HrStart, Hour([stop time]) AS HrStop,
[date] & " " & [start time] AS Start,
IIf([hrstart]>12 And [hrstop]<12,[date]+1 & " " & [stop time],[date] & " " & [stop time]) AS Stop,
DateDiff("n",[start],[stop]) AS [Runtime (Min)],
[runtime (Min)]/60 AS [Runtime (Hrs)]
但在我的SQL Server端:
我用来检索sql的相同信息的查询是:
SELECT TOP (100) PERCENT Date, [Unit UPC Base Item], [Item (Optional)], [Preset Number], [Product Group], [Product Group Description],
Shift, [Rotation Code],BBD,
[Operator Name], Supervisor, [Production Line],
[Production Line Description], [Bagger Number], StartTime,
StopTime, HrStart, HrStop,
Start, Stop, DATEDIFF(MINUTE, Start, Stop) AS [RunTime Mins],
DATEDIFF(MINUTE, Start, Stop) / 60.0 AS [RunTime Hrs]
FROM (SELECT StartTime, StopTime, HrStart,HrStop, Start,
DATEADD(DAY, CASE WHEN HrStart > 12 AND HrStop < 12 THEN 1 ELSE 0 END, Stop)
AS Stop
FROM (SELECT LEFT(CONVERT(TIME, dbo.[Net Weight Tracking].[Start Time]), 5)
AS StartTime,
LEFT(CONVERT(TIME, dbo.[Net Weight Tracking].[Stop Time]), 5) AS StopTime,
DATEPART(HOUR, dbo.[Net Weight Tracking].[Start Time]) AS HrStart,
DATEPART(HOUR, dbo.[Net Weight Tracking].[Stop Time]) AS HrStop,
DATEADD(MINUTE, DATEDIFF(MINUTE, 0, CONVERT(TIME, dbo.[Net Weight Tracking].[Start Time])), dbo.[Net Weight Tracking].Date) AS Start,
DATEADD(MINUTE, DATEDIFF(MINUTE, 0, CONVERT(TIME, dbo.[Net Weight Tracking].[Stop Time])), dbo.[Net Weight Tracking].Date)
AS Stop
我想知道如何访问能够在hrs中获取运行时间?请帮助??
答案 0 :(得分:1)
在Access查询中,[Stop]
(在[Runtime (Min)]
中使用)来自IIF()
函数,该函数只是if / then / else的MS Access函数。为了重现同样的结果,您需要在SQL Server中复制此if / then / else,而上面没有显示。
此外,SQL Server的相应IF函数是CASE
函数,您可以在WHEN
子句中插入条件并将其应用于THEN
子句,并将其应用于ELSE
子句中。 {1}}条款。此外,SQL Server 2012确实使用IIF函数。
另请注意,在SQL Server中,您无法在同一查询中引用计算列的别名,这意味着与Access查询不同,您必须重新写出特定表达式中使用的其他公式。
答案 1 :(得分:1)
您的查询对我来说似乎没问题,如果这是唯一给出错误的行,那么在尝试更新停止时间时可能会出现错误,那么我要做的是尝试手动更新STOP到2013年10月7日,看看是否能解决您的问题,我的猜测是因为停止时间为空,它会将您的查询评估为以下内容:
Start, Stop, DATEDIFF(MINUTE, Start, null) AS [RunTime Mins],
DATEDIFF(MINUTE, Start, null) / 60.0 AS [RunTime Hrs]
以上结果为null,这是所有其他3列为空的原因:
RunTimeMins,RunTimeHrs,Stop Time为空,因为它是从Stop
派生的