我有一个视图,它根据PARTITION BY
子句计算前一行的值的滚动总和,我需要指出PARTITION BY
子句中的一个字段可以有空值。
sum(s."QuantityChange") OVER (PARTITION BY s."LocationId", s."PartId", s."SupplierFacilityId" ORDER BY s."DueDate" ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS "RunningSum"
有时SupplierFacilityId
为空,这很好,它仍应包含在sum()
计算中。
Postgres可以做到这一点吗?
您来自评论的图像(应该是问题中的文本)显示您使用此子句运行查询:
WHERE
所以你可以放弃
"SupplierFacilityId"
来PARTITION BY
实现你想要的:行"SupplierFacilityId" IS NULL
被视为分区的平等对等点:此外,由于默认的框架选项是
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
,并且假设它(s."LocationId", s."PartId", s."DueDate")
被定义为唯一的(这使得在这种情况RANGE
下ROWS
等效),您可以删除自定义框架选项:如果没有上述
WHERE
子句,使用简单的窗口函数将无法实现您的目标,因为您必须在多个分区中使用具有 NULL 值的相同行。您必须先将这些行相乘...正如评论中提到的 ypercube ,即使
SupplierFacilityId
为空,它也应该仍然有效。但是,如果您遇到问题或想强制它默认为特定值,您可以使用该COALESCE()
函数将NULL
值替换为其他值。根据您更新的评论,这是一个示例查询,它使用一个简单的
CASE
语句来实现您的图像逻辑: