请观察:
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 select语句。是否可以只使用一个顶级SQL select语句,将另一个嵌套在?
中答案 0 :(得分:0)
您可以将文字AND bjs.IsFastLane = COALESCE(@UseFastLane, 0)
替换为:
AND bjs.IsFastLane = (SELECT Max(IsFastLane)
FROM BackgroundJobService)
假设BackgroundJobService中有行,它应该给你一个等价的查询。
如果BackgroundJobService中可能有零行,那么您可以使用COALESCE函数包装select以返回0,如下所示:
COALESCE((SELECT Max(IsFastLane) FROM BackgroundJobService), 0)