Sql XML-Oracle-将员工详细信息合并到一个XML输出记录的语法
使用Oracle SQL Developer,我需要为每个有多个hourslost记录的员工获取一个xml输出记录 如果员工1111有3个已用小时损失记录,我希望所有实例如下所示: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
<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的示例吗?