1

请注意:

DECLARE @UseFastLane BIT


SELECT TOP 1 @UseFastLane = 1
FROM   BackgroundJobService
WHERE  IsFastLane = 1;


SELECT TOP 1 bjs.HostName    AllocatedAgentHostName,
             bjs.ServiceName AllocatedAgentServiceName,
             bjs.IsFastLane,
             SUM(CASE
                   WHEN bjw.WorkStatusTypeId IN ( 2, 3, 4, 10 ) THEN 1
                   ELSE 0
                 END)        AS InProgress
FROM   BackgroundJobService bjs
       LEFT JOIN BackgroundJobWork bjw
         ON bjw.AllocatedAgentHostName = bjs.HostName
            AND bjw.AllocatedAgentServiceName = bjs.ServiceName
WHERE  bjs.AgentStatusTypeId = 2
       AND bjs.IsFastLane = COALESCE(@UseFastLane, 0)
GROUP  BY bjs.HostName,
          bjs.ServiceName,
          bjs.IsFastLane
ORDER  BY IsFastLane DESC,
          InProgress 

我在这里使用了两个 SQL 选择语句。是否可以只使用一个顶级 SQL 选择语句,在其中嵌套另一个?

4

1 回答 1

0

您可以将文本替换为AND bjs.IsFastLane = COALESCE(@UseFastLane, 0)

AND bjs.IsFastLane = (SELECT Max(IsFastLane)
FROM   BackgroundJobService)

假设 BackgroundJobService 中有行,它应该给你一个等效的查询。

如果 BackgroundJobService 中可能有零行,那么您可以使用 COALESCE 函数包装选择以返回 0,如下所示:

COALESCE((SELECT Max(IsFastLane) FROM BackgroundJobService), 0)
于 2013-09-10T14:55:14.260 回答