Хочу попробовать написать запрос. Мне нужно взять Targetvalue из таблицы #MetricTargets
для MetricID, которые находятся в #Metrics
.
{
CREATE TABLE #Metrics(
MetricId BiginT,
AccountId Bigint,
CountryId Bigint
)
INSERT INTO #Metrics(MetricId,AccountId,CountryId)select 8253,3,105
Create table #MetricTargets(
AccountId BIGINT,
MetricId BIGINT,
TargetValue BIGINT,
Countryid BIGINT
)
INSERT INTO #MetricTargets(AccountId,TargetValue,MetricId,Countryid)SELECT 105,100,3,8253
INSERT INTO #MetricTargets(AccountId,TargetValue,MetricId,Countryid)SELECT -1,80,3,8253
INSERT INTO #MetricTargets(AccountId,TargetValue,MetricId,Countryid)SELECT 105,99,-1,8253
}
CountryId = -1 и AccountId = -1 представляет для всех стран и учетных записей
Итак, я хочу получить Targetvalue для metricId, если AccountId и CountryId указаны в таблице #MetricTargets
в первом приоритете, AccountId = Something и countryId = -1 - это 2-й приоритет, ACcountId = -1 и CountryId = SomeThing, затем 3-й. priority и AccountId = -1 и CountryId = -1, затем последний приоритет.
Я написал запрос ниже, но он дает все записи.
select M.TargetValue from #Metrics S
LEFT JOIN #MetricsTargets M
ON M.MetricId = S.MetricId AND (S.AccountId+M.AccountId<S.AccountId or S.AccountId = M.AccountId)
AND (S.CountryId+M.CountryId<S.CountryId or S.CountryId=M.CountryId)