CASE при использовании данных из таблицы, не входящей в соединение - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь проверить, есть ли в другой таблице (на другом сервере) данные, относящиеся к обменному курсу за месяц, когда должен быть ETA.

Это код:

SELECT distinct 
case when month(pod_eta)>month(getdate()) AND month(max(server.database.[dbo].[CustomsExchangeRate].validto))> month(getdate()) then pod_eta 
    when month(pod_eta)>month(getdate()) AND month(max(server.database.[dbo].[CustomsExchangeRate].validto))= month(getdate()) THEN NULL
    ELSE pod_eta end AS ArrDate from staging.dutydata i

Логика заключается в том, что когда ETA в следующем месяце и у нас есть обменный курс на следующий месяц, тогда используйте ETA, если ETA в следующем месяце и у нас есть обменный курс на этот месяц, тогда ноль, иначеиспользуйте pod_eta (если ETA в этом месяце и у нас есть обменный курс в этом месяце)

MSSQL не удается, поскольку он не может связывать server.database.dbo] .CustomsExchangeRate] .validto.

Они имеютнет общих ключей, которые я могу использовать, чтобы присоединиться к ним ...

Ответы [ 2 ]

3 голосов
/ 08 апреля 2019

Просто перетащите его в переменную.

DECLARE @maxMonth int;

SELECT @maxMonth = DATEPART(month,max(validto))
  FROM server.database.[dbo].[CustomsExchangeRate];

SELECT distinct 
case when month(pod_eta)>month(getdate()) AND @maxMonth > month(getdate()) then pod_eta 
     when month(pod_eta)>month(getdate()) AND @maxMonth = month(getdate()) THEN NULL
     ELSE pod_eta end AS ArrDate 
from staging.dutydata i;

Хотя это кажется мне опасным. Что происходит, когда наступает декабрь, а максимальный срок действия - следующий январь?

0 голосов
/ 08 апреля 2019

Попробуйте это:

SELECT  distinct 
CASE WHEN month(pod_eta)>month(getdate()) AND month(max(myServer.validto))> month(getdate()) THEN pod_eta 
WHEN month(pod_eta)>month(getdate()) AND month(max(myServer.validto))= month(getdate()) THEN NULL
ELSE pod_eta END AS ArrDate 
FROM staging.dutydata i, server.database.[dbo].[CustomsExchangeRate] myServer Group by pod_eta 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...