Ниже приведено для BigQuery Standard SQL
#standardSQL
SELECT Scenario, Product_1, Product_2, candidates.Level, candidates.Value
FROM (
SELECT Scenario, Product_1, Product_2, t2.Level,
ARRAY_AGG(
STRUCT(IF(t2.Level = 'NA', 'NA', IFNULL(t1.Level, t2.Level)) AS Level, IF(Value IS NULL OR t2.Level = 'NA', 0, Value) AS Value)
ORDER BY CASE t2.Level
WHEN 'Low' THEN CASE t1.Level WHEN 'Low' THEN 1 WHEN 'Med' THEN 2 WHEN 'High' THEN 3 END
WHEN 'Med' THEN CASE t1.Level WHEN 'Low' THEN 77 WHEN 'Med' THEN 1 WHEN 'High' THEN 2 END
WHEN 'High' THEN CASE t1.Level WHEN 'Low' THEN 77 WHEN 'Med' THEN 66 WHEN 'High' THEN 1 END
ELSE 0
END
)[OFFSET(0)] candidates
FROM `project.dataset.table2` t2
LEFT JOIN `project.dataset.table1` t1
USING(Product_1, Product_2)
GROUP BY Scenario, Product_1, Product_2, Level
)
Если применить к образцу данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table1` AS (
SELECT 'C' Product_1, 'D' Product_2, 'High' Level, 10 Value UNION ALL
SELECT 'A', 'B', 'Med', 11 UNION ALL
SELECT 'A', 'B', 'High', 12 UNION ALL
SELECT 'B', 'C', 'Med', 13 UNION ALL
SELECT 'B', 'C', 'High', 9
),`project.dataset.table2` AS (
SELECT 1 Scenario, 'A' Product_1, 'B' Product_2, 'Low' Level UNION ALL
SELECT 2, 'C', 'D', 'Low' UNION ALL
SELECT 3, 'A', 'B', 'Med' UNION ALL
SELECT 4, 'M', 'N', 'High' UNION ALL
SELECT 5, 'A', 'B', 'NA'
)
SELECT Scenario, Product_1, Product_2, candidates.Level, candidates.Value
FROM (
SELECT Scenario, Product_1, Product_2, t2.Level,
ARRAY_AGG(
STRUCT(IF(t2.Level = 'NA', 'NA', IFNULL(t1.Level, t2.Level)) AS Level, IF(Value IS NULL OR t2.Level = 'NA', 0, Value) AS Value)
ORDER BY CASE t2.Level
WHEN 'Low' THEN CASE t1.Level WHEN 'Low' THEN 1 WHEN 'Med' THEN 2 WHEN 'High' THEN 3 END
WHEN 'Med' THEN CASE t1.Level WHEN 'Low' THEN 77 WHEN 'Med' THEN 1 WHEN 'High' THEN 2 END
WHEN 'High' THEN CASE t1.Level WHEN 'Low' THEN 77 WHEN 'Med' THEN 66 WHEN 'High' THEN 1 END
ELSE 0
END
)[OFFSET(0)] candidates
FROM `project.dataset.table2` t2
LEFT JOIN `project.dataset.table1` t1
USING(Product_1, Product_2)
GROUP BY Scenario, Product_1, Product_2, Level
)
, результат будет
Row Scenario Product_1 Product_2 Level Value
1 1 A B Med 11
2 2 C D High 10
3 3 A B Med 11
4 4 M N High 0
5 5 A B NA 0
Я думаю, что выше в основном дает вам то, что вам нужно, но может потребоваться некоторая настройка, которую, я надеюсь, вы сможете сделать