SQL - 当产品存在时,将其对应的值填充到分区内的所有行

SQL - Case when product exists, fill up its corresponding value to all rows within the partition

我有类似下面的每月数据集。

我有产品、公司 ID、日期和数量。一家公司(用公司 ID 表示)可以购买多种产品。我想创建一个新列,如果公司在每个订单项的月份购买,该列的数量将是产品 'C'。如果未购买产品 'C',则 return 0.

Product Company_ID  Date    Quantity    Desired_Calculated_Column
  A     1         5/1/2019    100                      300
  B     1         5/1/2019    200                      300
  C     1         5/1/2019    300                      300
  A     2         6/1/2019    150                      125
  B     2         6/1/2019    250                      125
  C     2         6/1/2019    125                      125
  A     3         7/1/2019    175                       0
  B     3         7/1/2019    275                       0

我一直在尝试根据产品和公司 ID 对数据进行分区。我一直在尝试利用 LAST_VALUE 但没有成功。

LAST_VALUE(quantity) OVER (PARTITION BY Date, Company_ID 
                           ORDER BY product_group  
                          ) AS Desired_Calculated_Column

你不想要 last_value()。您可以使用条件聚合,假设 'C' 每组发生一次:

MAX(CASE WHEN product_group = 'C' THEN quantity ELSE 0 END) OVER
    (PARTITION BY Date, Company_ID) AS C_quantity