首页 > 解决方案 > SQL - 当产品存在时,将其对应的值填充到分区内的所有行

问题描述

我有类似以下每月数据集的内容。

我有一个产品、公司 ID、日期和数量。一家公司(用公司 ID 表示)可以购买多种产品。我想创建一个新列,如果公司在当月购买每个行项目,则该列将包含产品“C”的数量。如果没有购买产品“C”,则返回 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

标签: sqlpartitioning

解决方案


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

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

推荐阅读