Technical

SQL Query to Fetch Day-Wise Timecard Details in Oracle Fusion HCM

Learn how to fetch day-wise timecard details in Oracle Fusion HCM using SQL. Complete query with examples for employee hours, time types, and payroll integration.

SQL Query to Fetch Day-Wise Timecard Details

Managing employee timecards efficiently is one of the most important tasks in Oracle Fusion HCM Time and Labor. Whether you’re building a BI Publisher report, validating payroll hours, auditing time entries, or integrating data with external systems, having a reliable SQL query can save hours of effort.

This comprehensive guide explores a powerful SQL query that extracts day-wise employee timecard details directly from Oracle Fusion HCM tables with complete examples and optimization tips.

What You’ll Get From This Query

This SQL query retrieves comprehensive timecard information including:

✅ Employee Number and Details ✅ Timecard Date (Day-wise) ✅ Hours Worked Per Day ✅ Time Type Name ✅ Payroll Time Type ✅ Absence Type Details ✅ Legal Employer Information ✅ Legislative Data Group (LDG) ✅ Work Terms Assignment Number ✅ Processed Timecard Status

If you’re working on Oracle Fusion Time and Labor reporting, this query will be extremely useful for your projects and can significantly reduce development time.

Why This Query Is Critical

In Oracle Fusion HCM, timecard information is stored across multiple Workforce Management (HWM) tables. Extracting meaningful and user-friendly timecard details requires joining several complex tables together.

This SQL query helps you:

✅ Build accurate BI Publisher reports ✅ Audit employee time entries ✅ Validate payroll processing ✅ Analyze absence hours ✅ Create integrations with external payroll systems ✅ Fetch processed timecard details with complete details ✅ Reconcile time and labor data across the organization

Complete Production-Ready SQL Query

/******************************************************************************
RICEF ID    : GCS_REPORT_004
REPORT NAME : REPORT TO FETCH DAY-WISE TIMECARD DETAILS
REPORT TYPE : BIP REPORT
DESCRIPTION : THIS REPORT WILL FETCH THE DAY-WISE TIMECARD DETAILS 
              FROM ORACLE FUSION.

CHANGE HISTORY:
NAME                  DATE           VERSION    COMMENTS
GrowCloudSkills      01-MAY-2026     V1.0       INITIAL VERSION
******************************************************************************/

WITH ATTRS AS (
    SELECT A.TM_REC_ID,
        MAX(CASE WHEN A.ATTRIBUTE_NAME = 'PayrollTimeType'
                 THEN A.ATTRIBUTE_VALUE END) AS PAYROLL_TIME_TYPE,
        MAX(CASE WHEN A.ATTRIBUTE_NAME = 'AbsenceType'
                 THEN A.ATTRIBUTE_VALUE END) AS ABSENCE_TYPE,
        MAX(CASE WHEN A.ATTRIBUTE_NAME = 'PJC_EXPENDITURE_TYPE_NAME'
                 THEN (A.ATTRIBUTE_VALUE) END) AS PJC_EXPENDITURE_TYPE_NAME
    FROM HWM_TM_REP_RECORD_ATRBS_V A
    WHERE A.ATTRIBUTE_NAME IN ('PJC_PROJECT_ID',
                                'PJC_EXPENDITURE_TYPE_NAME',
                                'PayrollTimeType',
                                'AbsenceType')
    GROUP BY A.TM_REC_ID
)

SELECT
    PAPF.PERSON_NUMBER EMP_NUMBER,
    TO_CHAR(HTR.ACTUAL_DATE, 'MM/DD/YYYY') TIMECARD_ACTUAL_DATE,
    HTR.MEASURE HOURS,
    COALESCE((
        SELECT MAX(HNVT.ALT_NAME_VALUE)
        FROM HWM_TE_ALT_NAME_VALS_B HNVB,
             HWM_TE_ALT_NAME_VALS_TL HNVT
        WHERE HNVB.TE_ALT_NAME_VAL_ID = HNVT.TE_ALT_NAME_VAL_ID
          AND HNVB.ATTRIBUTE2 = ATTRS.PJC_EXPENDITURE_TYPE_NAME
          AND HNVT.LANGUAGE = 'US'
          AND HNVT.SOURCE_LANG = 'US'
          AND ROWNUM = 1
    ), (
        SELECT MAX(HNVT.ALT_NAME_VALUE)
        FROM HWM_TE_ALT_NAME_VALS_B HNVB,
             HWM_TE_ALT_NAME_VALS_TL HNVT
        WHERE HNVB.TE_ALT_NAME_VAL_ID = HNVT.TE_ALT_NAME_VAL_ID
          AND TO_CHAR(HNVB.ATTRIBUTE3) = TO_CHAR(ATTRS.ABSENCE_TYPE)
          AND HNVT.LANGUAGE = 'US'
          AND HNVT.SOURCE_LANG = 'US'
          AND ROWNUM = 1
    ), (
        SELECT MAX(HNVT.ALT_NAME_VALUE)
        FROM HWM_TE_ALT_NAME_VALS_B HNVB,
             HWM_TE_ALT_NAME_VALS_TL HNVT
        WHERE HNVB.TE_ALT_NAME_VAL_ID = HNVT.TE_ALT_NAME_VAL_ID
          AND SUBSTR(HNVB.ATTRIBUTE1, INSTR(HNVB.ATTRIBUTE1, '_') + 1) = ATTRS.PAYROLL_TIME_TYPE
          AND HNVT.LANGUAGE = 'US'
          AND HNVT.SOURCE_LANG = 'US'
          AND ROWNUM = 1
    )) AS TIME_TYPE_NAME,
    PLE.NAME LEGAL_ENTITY_NAME,
    PLDGT.NAME LDG_NAME,
    PAAM1.ASSIGNMENT_NUMBER WORK_TERM_NUMBER,
    ATTRS.PAYROLL_TIME_TYPE,
    ATTRS.ABSENCE_TYPE,
    ATTRS.PJC_EXPENDITURE_TYPE_NAME

FROM PER_ALL_PEOPLE_F PAPF,
     PER_PERSON_NAMES_F PPNF,
     PER_ALL_ASSIGNMENTS_M PAAM,
     PER_PERIODS_OF_SERVICE PPOS,
     HWM_TM_REC HTR,
     HWM_TM_REC_GRP_USAGES HTRGU,
     HWM_TM_REC_GRP HTRG,
     HWM_TM_REC_GRP HTRG1,
     HWM_GRP_TYPE HGT,
     HWM_TM_REC_GRP_SUM HTM,
     ATTRS,
     PER_LEGAL_EMPLOYERS PLE,
     PER_LEGISLATIVE_DATA_GROUPS PLDG,
     PER_LEGISLATIVE_DATA_GROUPS_TL PLDGT,
     HR_ORGANIZATION_INFORMATION_F PSU_INF,
     PER_ALL_ASSIGNMENTS_M PAAM1

WHERE 1=1
    AND PAPF.PERSON_ID = PPNF.PERSON_ID
    AND PPNF.NAME_TYPE = 'GLOBAL'
    AND SYSDATE BETWEEN TRUNC(PAPF.EFFECTIVE_START_DATE) AND TRUNC(PAPF.EFFECTIVE_END_DATE)
    AND SYSDATE BETWEEN TRUNC(PPNF.EFFECTIVE_START_DATE) AND TRUNC(PPNF.EFFECTIVE_END_DATE)
    AND PAPF.PERSON_ID = PAAM.PERSON_ID
    AND PAAM.ASSIGNMENT_STATUS_TYPE = 'ACTIVE'
    AND PAAM.PRIMARY_ASSIGNMENT_FLAG = 'Y'
    AND PAAM.EFFECTIVE_LATEST_CHANGE = 'Y'
    AND SYSDATE BETWEEN TRUNC(PAAM.EFFECTIVE_START_DATE) AND TRUNC(PAAM.EFFECTIVE_END_DATE)
    AND PAPF.PERSON_ID = PPOS.PERSON_ID
    AND PAAM.PERIOD_OF_SERVICE_ID = PPOS.PERIOD_OF_SERVICE_ID
    AND PPOS.PERIOD_TYPE = 'E'
    AND PPOS.PRIMARY_FLAG = 'Y'
    AND PAPF.PERSON_ID = HTR.RESOURCE_ID
    AND HTR.DELETE_FLAG IS NULL
    AND HTR.LATEST_VERSION = 'Y'
    AND HTR.LAYER_CODE = 'TIME_RPTD'
    AND UPPER(HTR.UNIT_OF_MEASURE) = UPPER('HR')
    AND HTM.STATUS = 'APPROVED'
    AND HTRGU.TM_REC_GRP_ID = HTRG.TM_REC_GRP_ID
    AND HTRGU.TM_REC_GRP_VERSION = HTRG.TM_REC_GRP_VERSION
    AND HTRG.PARENT_TM_REC_GRP_ID = HTRG1.TM_REC_GRP_ID
    AND HTRG.PARENT_TM_REC_GRP_VERSION = HTRG1.TM_REC_GRP_VERSION
    AND HTR.TM_REC_ID = HTRGU.TM_REC_ID
    AND HTR.TM_REC_VERSION = HTRGU.TM_REC_VERSION
    AND HTRG1.GRP_TYPE_ID = HGT.GRP_TYPE_ID
    AND UPPER(HGT.NAME) = 'PROCESSED TIMECARD'
    AND HTM.RESOURCE_ID = HTR.RESOURCE_ID
    AND HTM.SUBRESOURCE_ID = HTR.SUBRESOURCE_ID
    AND HTR.START_TIME BETWEEN HTM.START_TIME AND HTM.STOP_TIME
    AND HTR.TM_REC_ID = ATTRS.TM_REC_ID
    AND PAAM.LEGAL_ENTITY_ID = PLE.ORGANIZATION_ID
    AND PLE.STATUS = 'A'
    AND SYSDATE BETWEEN TRUNC(PLE.EFFECTIVE_START_DATE) AND TRUNC(PLE.EFFECTIVE_END_DATE)
    AND PLDG.LEGISLATIVE_DATA_GROUP_ID = PLDGT.LEGISLATIVE_DATA_GROUP_ID
    AND PLDGT.LANGUAGE = 'US'
    AND PSU_INF.ORG_INFORMATION_CONTEXT = 'PER_PSU_PAYROLL_INFO'
    AND PSU_INF.ORG_INFORMATION1 = PLDGT.LEGISLATIVE_DATA_GROUP_ID
    AND PSU_INF.ORGANIZATION_ID = PLE.ORGANIZATION_ID
    AND PAAM.WORK_TERMS_ASSIGNMENT_ID = PAAM1.ASSIGNMENT_ID
    -- CUSTOMIZE THESE FILTERS FOR YOUR NEEDS
    AND PAPF.PERSON_NUMBER = '1234'
    AND TRUNC(HTR.ACTUAL_DATE) BETWEEN TO_DATE('01-01-2026','DD-MM-YYYY') 
                                    AND TO_DATE('01-02-2026','DD-MM-YYYY')

ORDER BY PAPF.PERSON_NUMBER, HTR.ACTUAL_DATE;

Query Customization Guide

1. Fetch Data for All Employees

Remove this line:

AND PAPF.PERSON_NUMBER = '1234'

This will return timecard data for all active employees.

2. Modify Date Filters

Adjust the date range for your reporting needs:

AND TRUNC(HTR.ACTUAL_DATE) BETWEEN TO_DATE('01-01-2026','DD-MM-YYYY') 
                                AND TO_DATE('31-12-2026','DD-MM-YYYY')

Date filters are highly recommended for performance optimization.

3. Include Only Approved Timecards

This line is already in the query:

AND HTM.STATUS = 'APPROVED'

To include all statuses (including rejected/draft), remove this condition.

AND PLE.ORGANIZATION_ID = 123456

This restricts results to a specific legal employer.

Key Tables and Their Purpose

Understanding the tables used in this query helps with modifications and troubleshooting:

Table NamePurpose
HWM_TM_RECCore time entry records with actual timecard data
HWM_TM_REP_RECORD_ATRBS_VTimecard attributes (payroll type, absence type)
HWM_TM_REC_GRPTimecard grouping and hierarchy
HWM_GRP_TYPEGrouping type definitions (processed, submitted)
HWM_TM_REC_GRP_SUMTimecard group summaries with status
PER_ALL_PEOPLE_FEmployee master data
PER_ALL_ASSIGNMENTS_MEmployee assignment details
PER_LEGAL_EMPLOYERSLegal entity information
PER_LEGISLATIVE_DATA_GROUPS_TLLDG names and translations

Performance Optimization Tips

In large Oracle Fusion environments, timecard tables can contain millions of records. To ensure optimal performance:

Always use date filters - Critical for large datasets ✅ Filter by specific employees - Avoid pulling unnecessary data ✅ Use bind variables - Improves query plan caching ✅ Include approval status filters - Reduces unnecessary joins ✅ Avoid unnecessary columns - Select only required fields ✅ Test queries in non-production - Validate before running on prod

Real-Time Business Use Cases

This query is commonly used for:

✅ Payroll reconciliation and validation ✅ Time and Labor reporting dashboards ✅ BI Publisher automated reports ✅ Oracle Fusion HCM integrations with external systems ✅ Employee attendance tracking and analysis ✅ Overtime and extra hours identification ✅ Absence hour calculations ✅ Project costing and resource allocation reports

FAQ: Common Questions About This Query

Which Oracle Fusion module is this for?

This query primarily uses:

  • Oracle Fusion Time and Labor (OTL) - for timecard management
  • Workforce Management (HWM) - backend tables storing time data
  • Core HR - for employee and assignment information

Can this query be used in BI Publisher?

Yes, absolutely! This query is fully suitable for:

  • BI Publisher Data Models
  • OTBI custom SQL
  • HCM Extract validations
  • Custom Oracle Fusion reports

Just ensure proper parameter mapping for employee filters and date ranges.

What if I need to include rejected timecards?

Remove or modify this condition:

AND HTM.STATUS = 'APPROVED'

Replace with:

AND HTM.STATUS IN ('APPROVED', 'REJECTED', 'DRAFT')

How can I export results to Excel?

Use Oracle SQL*Plus, SQL Developer, or your BI tool’s export feature. The query returns standard Oracle result sets compatible with all export formats.

Conclusion

Extracting day-wise timecard details in Oracle Fusion HCM requires understanding the complex HWM data model. This production-ready SQL query simplifies the process by:

  • Combining employee, assignment, and timecard data
  • Extracting payroll and absence attributes
  • Providing complete legal entity and LDG information
  • Delivering processed timecard details only

Whether you’re building reports, validating data, or integrating with external systems, this query provides a solid foundation for Oracle Fusion Time and Labor projects.

Master this query and you’ll significantly improve your ability to troubleshoot, report, and manage timecard data in Oracle Fusion!

💡 Master Oracle Fusion Timecard Management

Learning to query timecard data effectively is essential for:

  • Building accurate payroll reports
  • Troubleshooting time entry issues
  • Creating real-time dashboards
  • Validating data integrity
  • Improving user adoption

🚀 Keep Learning and Growing

  • Subscribe to GrowCloudSkills for more advanced SQL queries and technical guides
  • Follow us on LinkedIn for daily Oracle Fusion tips and best practices
  • Watch our video tutorials on YouTube for visual, step-by-step learning

About GrowCloudSkills

GrowCloudSkills is your trusted partner for mastering Oracle Fusion Cloud Applications through:

Production-ready SQL queries you can use immediately ✅ Real-world implementation examples from actual projects ✅ Complete step-by-step guides for complex technical topics ✅ Industry best practices based on years of consulting experience ✅ Supportive community of Oracle Fusion professionals

Whether you’re a junior consultant learning the foundations or a senior architect designing enterprise solutions, we’re committed to helping you succeed.

Connect With Us

Have questions about timecard queries or other Oracle Fusion topics? Drop a comment below or reach out on LinkedIn. We’d love to help you succeed in your Oracle Fusion journey!

Happy querying and master Oracle Fusion Time and Labor! 🚀