Получить данные из второй БД на основе результатов первого запроса - PullRequest
0 голосов
/ 23 апреля 2019

Нужна помощь в извлечении данных из второй базы данных на основе результатов, приведенных в рабочем запросе. Сокращенное значение необходимо найти во второй базе данных, чтобы получить полное читаемое имя. Надеюсь, это имеет смысл. Любая помощь приветствуется.

Рабочий запрос:

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 голосов
/ 23 апреля 2019

Забудьте, что вы когда-либо узнали о 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;

Опять же - это "примерно" то, что вы хотите, так как это предполагает некоторые догадки.Обратите внимание, что я добавил несколько лучших практик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...