我遵循了关于techonthenet的指南,其中说明对于SUM查询,您需要将Sum(expr)
放在SELECT
语句中,然后将GROUP BY
放在您选择的每个其他字段中(伪造) - 代码;如果我错了,请纠正我。以下是我的尝试。为什么我收到错误
"执行查询时发生错误。 '附近的语法不正确('。错误:102;第9行和第34行;
所有这些的最终结果将是报告,而不仅仅是查询。在报告中,将显示以下所有字段,但[差异]字段将在底部合计。我觉得我不应该在查询中总结这个,而应该在报告中总结...
编辑 - 我删除了[ALL]但现在我收到了错误"无法在用于GROUP BY子句列表的表达式中使用聚合或子查询。 "它还说这个错误在第29行。我将在下面标记。
SELECT
JOB.WHSE,
LEFT(RESSCHD000.RESID, 6) AS Line,
RIGHT(LEFT(JOB000.JSID, 11), 10)+ '-' +RIGHT(LEFT(JOB000.JSID, 27), 2) AS [Job Number],
LEFT(RESSCHD000.STARTDATE, 7)+ ' ' +RIGHT(Convert(Datetime, MIN(RESSCHD000.STARTDATE)), 8) AS [Start],
LEFT(RESSCHD000.ENDDATE, 7)+ ' ' +RIGHT(Convert(Datetime, MAX(RESSCHD000.ENDDATE)),8) AS [End],
RESSCHD000.STATUSCD,
Sum((Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00'))) AS [SumOfDifference],
RESSCHD000.JOBTAG,
CASE
WHEN Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00') > '3:59:00'
THEN 'Full Sanitation'
ELSE 'Dry Clean'
END AS [Type of Sanitation],
jrt_sch.Uf_Quoted_Crew_Size AS [Crew Size]
FROM
RESSCHD000 INNER JOIN JOB000 ON RESSCHD000.JOBTAG = JOB000.JOBTAG
INNER JOIN JOB ON JOB.JOB = RIGHT(LEFT(JOB000.JSID, 11), 10) AND JOB.suffix = RIGHT(LEFT(JOB000.JSID, 27), 2)
LEFT OUTER JOIN jrt_sch ON jrt_sch.job = job.job
WHERE
job.job_date = @job_date
GROUP BY
JOB.WHSE,
LEFT(RESSCHD000.RESID, 6),
RIGHT(LEFT(JOB000.JSID, 11), 10)+ '-' +RIGHT(LEFT(JOB000.JSID, 27), 2), --line 29
LEFT(RESSCHD000.STARTDATE, 7)+ ' ' +RIGHT(Convert(Datetime, MIN(RESSCHD000.STARTDATE)), 8),
LEFT(RESSCHD000.ENDDATE, 7)+ ' ' +RIGHT(Convert(Datetime, MAX(RESSCHD000.ENDDATE)),8),
RESSCHD000.STATUSCD,
RESSCHD000.JOBTAG,
CASE
WHEN Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00') > '3:59:00'
THEN 'Full Sanitation'
ELSE 'Dry Clean'
END,
jrt_sch.Uf_Quoted_Crew_Size
HAVING
RESSCHD000.STATUSCD='s'
答案 0 :(得分:0)
错误是由于这一行:
Sum([ALL] (Dateadd("n",DateDiff("n", MIN(RESSCHD000.STARTDATE),MAX(RESSCHD000.ENDDATE)),'00:00:00'))) AS [SumOfDifference]
总和正在寻找要求的字段(或某种公式)。您有一个字段名称后跟一个公式。我猜你想要基于FIELD名称(SumOfDifference)的秒数之和。
我认为你只需要删除 [ALL] 。
SUM(DATEADD("n",DATEDIFF("n", MIN(RESSCHD000.STARTDATE), MAX(RESSCHD000.ENDDATE)),'00:00:00')) AS [SumOfDifference]