我有一列不同的缺勤值 -
abs_table
| 缺席型別 | 價值 | person_number | 常規測量小時 |
|---|---|---|---|
| FLT | 8 | 10 | 90 |
| 交流電 | 9 | 10 | |
| 尤爾 | 1 | 10 | |
| 協議書 | 6.5 | 10 | |
| 有薪酬的 | 2 | 10 | |
| FLT | 10 | 1 | 80 |
| 交流電 | 9 | 1 | |
| 尤爾 | 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 | 常規測量小時 |
|---|---|
| 10 | 79 |
| 1 | 60 |
我如何調整磁區的總和以獲得正確的結果
uj5u.com熱心網友回復:
您不需要分析SUM()函式,而是需要條件聚合,同時考慮NVL()到用零替換NULL值,例如
SELECT SUM(CASE
WHEN absence_type IN ('FLT', 'JUR', 'BRV', 'LOD', 'PAID') THEN
NVL(regular_measure_hours,0) -NVL(value,0)
END) AS regular_measure_hours,
person_number
FROM abs_table
GROUP BY person_number
Demo
uj5u.com熱心網友回復:
對于非常荒謬的單表資料模型(假設這是您的真實模型),您需要這樣的聚合:
select person_number,
sum(regular_measure_hours) -
nvl(sum(case when absence_type in ('FLT', 'JUR', 'BRV', 'LOD', 'PAID')
then value end), 0) as adjusted_hours
from abs_table
group by person_number
;
uj5u.com熱心網友回復:
按 PERSON_NUMBER 分組,僅針對這 5 種型別。
SELECT
PERSON_NUMBER,
SUM(regular_measure_hours)
- SUM(CASE
WHEN Absence_type IN ('FLT','JUR','BRV','LOD','PAID')
THEN VALUE
ELSE 0
END) as regular_measure_hours
FROM abs_table
WHERE (Absence_type IN ('FLT','JUR','BRV','LOD','PAID')
OR regular_measure_hours IS NOT NULL)
GROUP BY PERSON_NUMBER
ORDER BY PERSON_NUMBER
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/393570.html
上一篇:長時間在程序與查詢塊中運行
下一篇:在HTML中呼叫PHP變數
