Я хочу получить результаты SQL-запроса Ms, отсортированные по наилучшему совпадению.Это означает, что у меня есть две таблицы, подобные этой
CREATE TABLE #Leads(
Id INT IDENTITY(1,1),
LeadId INT,
PlanId INT,
RegionCode VARCHAR(20),
FuelType VARCHAR(20)
)
CREATE TABLE #Discounts(
Id INT IDENTITY(1,1),
PlanId INT,
RegionCode VARCHAR(20),
FuelType VARCHAR(20),
DiscountPercent DECIMAL(6,3)
)
И эти таблицы имеют следующие значения, как показано ниже
INSERT INTO #Leads([LeadId], [PlanId], [RegionCode], [FuelType])
VALUES (1,1,'HR26', 'Petrol'),
(2,2,'HR30', 'Diesel')
INSERT INTO #Discounts ([PlanId], [RegionCode], [FuelType], [DiscountPercent])
VALUES (1, null, null, 20),
(2, null, null, 10),
(2, 'HR30', null, 15),
(2, null, 'Diesel', 20),
(2, 'HR30', 'Diesel', 25)
Так что, если мы объединяем #leads
таблицы с #discounts
таблицей PlanId
затем -
для Plan 1
у нас нет нескольких записей о скидках, поэтому мы выберем первую, это будет 20%
, но для Плана 2 мы получаем данные как: -
Случай 1: У нас есть несколько записей скидок для Плана 2, теперь для текущего случая он должен выбрать 25%, потому что RegionCode
и FuelType
оба соответствуют свинцу.
Случай 2: Если я обновлю Plan 2
отвести и изменим RegionCode to NULL
(или любое значение, которое не совпадает в таблице скидок для Plan 2
), тогда следует выбрать 20%.
Случай 3: Если я обновлю Plan 2
lead и изменим FuelType to NULL
(или любое значение, которое не совпадает в таблице скидок для Plan 2
) и RegionCode обратно на HR30
, тогда он долженвыберите 15%
Случай 4: Если я изменю их оба на NULL
(или любое значение, которое не совпадает в таблице скидок для Plan 2
) тогда следует выбрать 10%.
Я хочу наилучшее из возможных совпадений для Plan2
Я не знаю, как написать запрос для этого, пожалуйста, помогите - заранее спасибо.