Ниже для BigQuery Standard SQL
#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
SELECT Product_ID, Category, STRING_AGG(DISTINCT SubCategory ) SubCategories
FROM `project.dataset.category`
GROUP BY Product_ID, Category
) c
USING (Product_ID)
Если применить к образцу данных из вашего вопроса - результат
Row Product_ID Category SubCategories Quantities_sold
1 123 Furniture Bookcases,Chairs 300
2 456 Office supplies Labels,Binders 400
или использовать ARRAY_AGG вместо STRING_AGG для получения подкатегорий как массив, как в примере ниже
#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
SELECT Product_ID, Category, ARRAY_AGG(DISTINCT SubCategory ) SubCategories
FROM `project.dataset.category`
GROUP BY Product_ID, Category
) c
USING (Product_ID)
, в этом случае результат будет таким, как показано ниже
Row Product_ID Category SubCategories Quantities_sold
1 123 Furniture Bookcases 300
Chairs
2 456 Office supplies Labels 400
Binders