【发布时间】:2022-01-22 15:05:05
【问题描述】:
我有一列包含不同的缺勤值 -
abs_table
| absence_type | value | person_number | regular_measure_hours |
|---|---|---|---|
| FLT | 8 | 10 | 90 |
| VAC | 9 | 10 | |
| JUR | 1 | 10 | |
| LOA | 6.5 | 10 | |
| PAID | 2 | 10 | |
| FLT | 10 | 1 | 80 |
| VAC | 9 | 1 | |
| JUR | 10 | 1 |
查询:
SELECT WHEN absence_type IN ('FLT', 'JUR', 'BRV', 'LOD', 'PAID') THEN
regular_measure_hours
- SUM(VALUE) OVER (PARTITION BY person_number value
ORDER BY person_number)
ELSE regular_measure_hours,
person_number
FROM abs_table
如果缺席类型在其中任何一个中-('FLT','JUR','BRV','LOD','PAID'),那么我需要用regular_measure_hours减去那些“值”列的总和
在大多数情况下,上列中的总和并没有给我正确的结果。
期望的输出:
| person_number | regular_measure_hours |
|---|---|
| 10 | 79 |
| 1 | 60 |
如何调整分区的总和以获得正确的结果
【问题讨论】:
-
您真的有一张与
abs_table完全相同的表,其中regular_measure_hours对每个不同的人都有一个非空值吗?这看起来像是一个非常有缺陷的数据模型。或者您实际上是否有正确的模型(至少两个表;“常规测量时间”存储在与“缺勤”无关的单独的较小表中),并且您向我们展示的是您在尝试中计算的中间结果解决问题?