根据第一个查询的结果从第二个数据库获取数据

时间:2019-04-23 15:20:41

标签: sql-server subquery

需要帮助,以便根据工作查询中给出的结果从第二个数据库中提取数据。短值需要在第二数据库中查找,以获得完整的可读名称。希望这是有道理的。任何帮助表示赞赏。

有效查询:

USE PData;
SELECT DISTINCT
       Customkey,
       COUNT(*) AS TotalQueries,
       SUM(CASE WHEN status <= '200' THEN 1 ELSE 0 END) AS Completed,
       SUM(CASE WHEN status >= '201' THEN 1 ELSE 0 END) AS Failed,
       (CAST(SUM(CASE WHEN status >= '201' THEN 1 ELSE 0 END) AS decimal) / COUNT(*)) * 100 AS FailedPercentage
FROM RQueue AS RQ WITH (NOLOCK)
WHERE AddDate >= DATEADD(MINUTE, -60, GETDATE())
GROUP BY CustomKey
ORDER BY 4 DESC,
         5 DESC;

当前结果:

CustomKey    TotalQueries    Completed    Failed    FailedPercentage
CA_N         18              0            18        100.00000000000
CA_S         11              0            11        100.00000000000

所需结果:

CustomKey    FullKeyName         TotalQueries    Completed    Failed    FailedPercentage
CA_N         California North    18              0            18        100.00000000000
CA_S         California South    11              0            11        100.00000000000

所需结果将第二列添加到最终结果中。这将来自:

From CustomData.DB
When  CustomKey table matches
return FullKeyName table content

1 个答案:

答案 0 :(得分:0)

忘记您曾经学过的nolock-在您了解它的作用和可能发生的事情之前,不要使用它。在这里使用安全吗?也许-但谁知道。通常包含它是因为有人说过“更快”。如果确实包含它,则应该知道它可能会做什么以及可能会产生什么错误(是),并准备在发生错误或有人质疑您的结果时做出响应。

接下来,DISTINCT在这里没有任何用处。为什么要包含它?最后,我们不按序数排序-您不应该鼓励这种不良习惯。

对于您的问题,只需将当前查询放在cte中,然后根据需要加入该cte。大致:

with cte as (select ... from dbo.RQueue ...)  --no order by clause here
select <columns you need> 
from cte inner (left?) join <database>.<schema>.<table> as NameLookup
  on cte.CustomKey = NameLookup.CustomKey 
order by cte.Failed desc, cte.FailedPercent desc;

再次-这“大概”是您想要的,因为它涉及一些猜测。注意,我添加了一些更好的做法。