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 

ここでは 2 つの SQL 選択ステートメントを使用しています。トップレベルのSQL selectステートメントを1つだけ使用して、別のステートメントをネストすることはできますか?

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 に答える