0

我从 SQL 查询得到以下输出:

Project_Manager_ID   PROject_Rank  On_boarding_Gap    Project_Gap    End_Gap
101                   1                   2                 3           0.833
101                   2                   7                 1           3.4
101                   3                   0                 -3           0
101                   4                   3                 1            1.2
102                   1                   -1                 0            1
102                   2                    2                 3            2
102                   3                    5                 2           -3

这是业务规则:

当 Rank =1 时 On_boarding_gap

当 Rank >1 并且 Rank < (max(rank) group by Project_Manager_ID) 然后 Project_gap

当 Rank = max(rank) group by Project_Manager_ID 然后 End_Gap

添加所有这些不同的差距,并找到每个 Project_Manager_ID 的差距总值。忽略所有负值。因此在上面的例子中Project_Manager_ID =101

On_boarding_gap = 2

Project_gap = 1 & -3 = 1(忽略 -3 值)

End_Gap = 1.2

总差距为 (2+1 +1.2) = 4.2。

对于 Project_Manager_ID =102

On_boarding_gap =-1 = 0(忽略 -1 值)

项目差距 = 3

End_Gap = -3 = 0(忽略 -3 值)

总差距为 ( 0+ 3+0) = 3

我不确定如何为此编写查询。

4

1 回答 1

0

嗯。. . case表达式和窗口函数为您提供每一行的空白:

select t.*,
       (case when project_rank = 1
             then on_boarding_gap
             when project_rank < max(project_rank) over (partition by Project_Manager_ID)
             then Project_gap
             else End_Gap
        end) as imputed_gap
from t;

然后聚合:

select Project_Manager_ID, sum(imputed_gap)
from (select t.*,
             (case when project_rank = 1
                   then on_boarding_gap
                   when project_rank < max(project_rank) over (partition by Project_Manager_ID)
                   then Project_gap
                   else End_Gap
              end) as imputed_gap
      from t
     ) t
where imputed_gap >= 0
group by Project_Manager_ID
于 2020-11-04T21:43:32.357 回答