Sql XML-Oracle-将员工详细信息合并到一个XML输出记录的语法

Sql XML-Oracle-将员工详细信息合并到一个XML输出记录的语法,sql,xml,oracle,Sql,Xml,Oracle,使用Oracle SQL Developer,我需要为每个有多个hourslost记录的员工获取一个xml输出记录 如果员工1111有3个已用小时损失记录,我希望所有实例如下所示: <Employee> <UniqueIdentifier> <NationalIdNumber>1111</NationalIdNumber> </UniqueIdentifier> <UsedHoursLost> <Dat

使用Oracle SQL Developer,我需要为每个有多个hourslost记录的员工获取一个xml输出记录

如果员工1111有3个已用小时损失记录,我希望所有实例如下所示:

<Employee>
<UniqueIdentifier>
    <NationalIdNumber>1111</NationalIdNumber>
</UniqueIdentifier>
<UsedHoursLost>
    <Date>2/01/2018</>
    <HoursLost>4</HoursLost>
    <Status>A</Status>
    <HourType>PTO'</HourType>
</UsedHoursLost>
<UsedHoursLost>
    <Date>7/01/2018</>
    <HoursLost>2</HoursLost>
    <Status>A</Status>
    <HourType>PTO'</HourType>
</UsedHoursLost>
<UsedHoursLost>
    <Date>8/01/2018</>
    <HoursLost>7</HoursLost>
    <Status>A</Status>
    <HourType>PTO'</HourType>
</UsedHoursLost>

查询应该如何获得第二个结果输出?

函数
XMLAGG
可以聚合行。函数
XMLCONCAT
可以将元素放在一起,而无需将一个元素创建为另一个元素的子元素

SELECT
    XMLELEMENT
    (
        "Employee",
        XMLCONCAT
        (
            XMLELEMENT
            (
                "UniqueIdentifier",
                XMLELEMENT("NationalIdNumber", a.employee)
            ),
            XMLAGG
            (
                XMLELEMENT
                (
                    "UsedHoursLost",
                    XMLFOREST
                    (
                        B.OCCURRENCE_DATE "Date",
                        B.HOURS "HoursLost",
                        B.STATUS "Status",
                        'PTO' "HourType"
                    ) results
                )
                ORDER BY B.OCCURRENCE_DATE
            )
        )
    )
FROM TABLE1 A
 JOIN TABLE2 B
 on a.employee = b.employee
WHERE a.COMPANY_ID = 1234
GROUP BY A.EMPLOYEE;
我使用了这个测试模式:

create table table1 as
select 1111 employee, 1234 company_id from dual;

create table table2 as
select 1111 employee, date '2018-02-01' occurrence_date, 4 hours, 'A' status from dual union all
select 1111 employee, date '2018-07-01' occurrence_date, 2 hours, 'A' status from dual union all
select 1111 employee, date '2018-08-01' occurrence_date, 7 hours, 'A' status from dual;

函数
XMLAGG
可以聚合行。函数
XMLCONCAT
可以将元素放在一起,而无需将一个元素创建为另一个元素的子元素

SELECT
    XMLELEMENT
    (
        "Employee",
        XMLCONCAT
        (
            XMLELEMENT
            (
                "UniqueIdentifier",
                XMLELEMENT("NationalIdNumber", a.employee)
            ),
            XMLAGG
            (
                XMLELEMENT
                (
                    "UsedHoursLost",
                    XMLFOREST
                    (
                        B.OCCURRENCE_DATE "Date",
                        B.HOURS "HoursLost",
                        B.STATUS "Status",
                        'PTO' "HourType"
                    ) results
                )
                ORDER BY B.OCCURRENCE_DATE
            )
        )
    )
FROM TABLE1 A
 JOIN TABLE2 B
 on a.employee = b.employee
WHERE a.COMPANY_ID = 1234
GROUP BY A.EMPLOYEE;
我使用了这个测试模式:

create table table1 as
select 1111 employee, 1234 company_id from dual;

create table table2 as
select 1111 employee, date '2018-02-01' occurrence_date, 4 hours, 'A' status from dual union all
select 1111 employee, date '2018-07-01' occurrence_date, 2 hours, 'A' status from dual union all
select 1111 employee, date '2018-08-01' occurrence_date, 7 hours, 'A' status from dual;

校正需要得到第一个结果输出,而不是第二个结果输出。还忘了在第一个结果的末尾添加。能否提供表1和表2的示例?更正需要获得第一个结果输出,而不是第二个结果输出。还忘了在第一个结果的末尾添加。您能提供表1和表2的示例吗?