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
我有类似下面的每月数据集。
我有产品、公司 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