我有一个更新声明,旨在管理" jobs"。我先处理一个工作,而其他工作排队等到第一个工作完成。在此之后,他们将被发送到流程(因为我可以利用第一次运行的计算结果更快)。
引用我自己的评论:
-- Set job status to 2 for where there is saved results file
-- Where there is no saved results file:
-- --Set job status to 2 for one instance of each unique param combination
-- --Set job status to 8 for all others
伪代码:
UPDATE #Jobs
SET [JobStatusId] = CASE
WHEN ISNULL([PreCalculated].[FileCount], 0) > 0 THEN 2
WHEN ISNULL([PreCalculated].[FileCount], 0) = 0 AND [GroupedOrder] = 1 THEN 2
ELSE 8 END
FROM #NewJobsGrouped [NewJobsGrouped]
LEFT JOIN (
SELECT COUNT([Id]) [FileCount],
[ResultsFile].[ParamsId]
FROM #ResultsFile [ResultsFile]
WHERE [ResultsFile].[IsActive] = 1
GROUP BY [ResultsFile].[ParamsId]
) [PreCalculated]
ON [PreCalculated].[ParamsId] = [NewJobsGrouped].[ParamsId]
#NewJobsGrouped的样子:
Job ID || GroupedOrder || ParamsId
1460 1 807
1461 2 807
1462 3 807
这不起作用。每项工作都设置为状态2.但是:
SELECT CASE
WHEN ISNULL([PreCalculated].[FileCount], 0) > 0 THEN 2
WHEN ISNULL([PreCalculated].[FileCount], 0) = 0 AND [GroupedOrder] = 1 THEN 2
ELSE 8 END [JobStatusId]
etc
完全符合我的预期。
为什么这两个案例陈述会给出不同的结果?有什么明显的东西我不见了吗?老实说,我无法解释我所看到的内容,虽然我可以使用另一个临时表来保存选择的输出并进行更简单的更新 - 但我想了解一下'继续?