我有一個表 abs_details 提供如下資料 -
PERSON_NUMBER ABS_DATE ABS_TYPE_NAME ABS_DAYS
1010 01-01-2022 PTO 1
1010 06-01-2022 PTO 0.52
1010 02-02-2022 VACATION 1
1010 03-02-2022 VACATION 0.2
1010 01-12-2021 PTO 1
1010 02-12-2021 sick 1
1010 30-12-2021 sick 1
1010 30-01-2022 SICK 1
我希望這些資料以下列方式顯示:
PERSON_NUMBER ABS_TYPE_NAME 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1010 PTO 2 0.52
1010 VACATION 1 0.2
1010 SICK 1 2
對于天數,1-31 should應該出現在標題中,如果在一個月或季度的第 01 天有任何缺勤,則該值應低于 1 ,如果該月的日期沒有值,則說沒有值來自在上述情況下為 07 日至 11 日,則輸出應顯示數字,但不應在其下提供任何值。
這在 SQL 中可行嗎?我有一個想法,我們可以使用pivot,但是如何修復 1-31 標題并每天在下面給出值。有什么建議么?
- 如果我通過多個季度,即 Q1(JAN-MAR)、Q2(APR-JUN),它應該總結這兩個季度之間的日期之間的值。如果只是 q1 那么只有 q1 結果
- 如果我通過了多個月,那么它應該顯示這多個月中缺勤型別的值的總和。
我將在引數中傳遞年份,以上兩個應該考慮我傳遞的年份。
uj5u.com熱心網友回復:
創建一個包含所有日期的列,并使用pivotoracle 中的函式向上旋轉。
SELECT *
FROM
(
SELECT PERSON_NUMBER,
EXTRACT(DAY FROM TO_DATE(ABS_DATE)) AS DAY_X,
ABS_TYPE_NAME,
ABS_DAYS
FROM TABLE
-- Add additional filter here which you want
)
PIVOT(SUM(ABS_DAYS)
FOR DAY_X IN (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31))
Db 小提琴 - https://dbfiddle.uk/?rdbms=oracle_21&fiddle=ad3af639235f7a6db415ec714a3ee0d9
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478840.html
