我要查询员工的指纹
SELECT
bp.Name
vahruae_date date,
to_char(vahruae_timeofattendance, 'hh:mi') Time
FROM vahruae_hr_empattendancelog empl
INNER JOIN c_bpartner bp ON empl.vahruae_enroll_id = bp.enroll_id
值显示如下
Name Date Time
-----------------------------------------
John 01-SEP-2022 1:00
John 01-SEP-2022 9:00
John 01-SEP-2022 13:00
John 01-SEP-2022 16:00
John 02-SEP-2022 1:00
John 02-SEP-2022 6:00
John 04-SEP-2022 5:00
. .
. .
John 31-SEP-2022 4:30
John 31-SEP-2022 7:00
Ali 01-SEP-2022 10:00
Ali 04-SEP-2022 5:00
. .
. .
我想在一个日期行中显示所有时间,如下所示
Name Date Time1 Time2 Time3 Time4
-----------------------------------------------------------------------------------------------
John 01-SEP-2022 1:00 9:00 13:00 16:00
John 02-SEP-2022 1:00 6:00 (null) (null)
John 04-SEP-2022 5:00 (null) (null) (null)
John 31-SEP-2022 4:30 7:00 (null) (null)
Ali 01-SEP-2022 10:00 (null) (null) (null)
Ali 05-SEP-2022 5:00 (null) (null) (null)
我不太擅长Pivot
,但我知道我不能在Pivot IN Clause
中使用subquery
。
我该怎么做呢?
2条答案
按热度按时间wgx48brx1#
使用
ROW_NUMBER
分析函数为子查询中的时间建立索引,然后使用PIVOT
:pes8fvy92#
我们需要使用
row_number()
按日期和名称对小时进行编号,然后进行旋转。| 名称名称名称|日期|时间1|时间2|时间3|时间4|
| - -|- -|- -|- -|- -|- -|
| 若翰|2022年9月1日|上午1时|上午9时|13点整|16点整|
| 若翰|2022年9月2日|上午1时|上午6时|零值|零值|
| 若翰|2022年9月4日|05点整|零值|零值|零值|
| 若翰|2022年10月1日|04点半|上午7时|零值|零值|
| 阿里|2022年9月1日|上午10时|零值|零值|零值|
| 阿里|2022年9月4日|05点整|零值|零值|零值|
Fiddle