У меня есть таблица A с столбцами product_id, cost, year, квартал, ... et c. У меня есть другая таблица B со столбцами product_id, base_cost, current_year, p_year, p_quarter, p_order.
Я хочу написать запрос на обновление для обновления A из B. Мои условия -
WHERE A.product_id=B.product_id
and A.year=B.current_year
and (A.year=B.p_year and A.quarter>B.p_quarter) or A.year>B.p_year
and A.cost=0;
Но проблема в том, что при этих условиях, если у меня более одной строки в B, я хочу обновляться только из строки B в соответствии с приоритетом.
Предоставление логики c и примеров для лучшего понимания -
в основном p_ обозначает приоритет. Я хочу обновить стоимость А от Б согласно p_order. Во-вторых, я не могу рассмотреть текущие и будущие кварталы для обновления.
Единственное сложное условие обновления A с помощью B: (для строки B) 1. если A.year> B.p_year, эта строка B имеет право на обновление 2.if (A.year = B.p_year), затем A.quarter> B.p_quarter Теперь, исходя из вышеупомянутых 2 условий, если у нас более 1 строки B для обновления, тогда та, которая имеет наивысший p_order, равна рассмотрен.
Пример 1-
Если A имеет 4 строки как:
product_id cost year quarter
102 0 2019 1
102 0 2019 2
102 0 2019 3
102 0 2019 4
И B имеет 3 строки, соответствующие предложению where:
MAPPING- B (p_year, квартал, p_order) ==> A (год, квартал)
Отображение показывает все строки A, которые эта строка B может обновлять
product_id cost current_year p_year quarter p_order Mapping
102 3.5 2019 2019 3 1 A(2019,4)
102 1.8 2019 2019 1 2 A(2019,2),A(2019,3),A(2019,4)
102 0.5 2019 2019 2 3 A(2019,3),A(2019,4)
Затем обновляется A должно быть:
MAPPING- A (год, квартал) ==> B (p_year, квартал, p_order)
Отображение показывает наиболее подходящую строку B (с наименьшим количеством p_order), которая обновила строку A.
product_id cost year quarter Mapping
102 0 2019 1 none
102 1.8 2019 2 B(2019,1,2)
102 1.8 2019 3 B(2019,1,2)
102 3.5 2019 4 B(2019,3,1)
Пример 2-
Если A имеет 4 строки как:
product_id cost year quarter
102 0 2019 1
102 0 2019 2
102 0 2019 3
102 0 2019 4
И B имеет 3 строки, соответствующие предложению where:
MAPPING- B (p_year, квартал, p_order) ==> A (год, квартал)
product_id cost current_year p_year quarter p_order Mapping
102 3.5 2019 2019 3 1 A(2019,4)
102 6.3 2019 2018 4 2 A(2019, all quarters)
102 0.5 2019 2019 2 3 A(2019,3),A(2019,4)
Тогда обновленное A должно быть:
MAPPING- A (год, четверть) ==> B (p_year, квартал, p_order)
product_id cost year quarter Mapping
102 6.3 2019 1 B(2018,4,2)
102 6.3 2019 2 B(2018,4,2)
102 6.3 2019 3 B(2018,4,2)
102 3.5 2019 4 B(2019,3,1)