如何按表达式进行分区

How to partition by an expression

我想按表达式而不是字段进行分区。接受这个查询

SELECT 
      ID,
      Value,
      Status,
      SUM(Value) OVER(PARTITION BY ID) AS "Sum",
      COUNT(*) OVER(PARTITION BY ID, Status = 'Ready') AS ReadyCount --Error here
FROM TestAggregation

我需要获取分组 Status 的 ReadyCount,但只需要将计数应用于就绪状态。这可能吗?

您可以改用条件总和:

SELECT 
      ID,
      Value,
      Status,
      SUM(Value) OVER(PARTITION BY ID) AS "Sum",
      SUM(CASE WHEN Status = 'Ready' THEN 1 ELSE 0 END) OVER(PARTITION BY ID) AS ReadyCount --Error here
FROM TestAggregation