繁体   English   中英

在下面的SQL示例中,如何在没有别名的情况下使用XMLAgg函数?

[英]How can I use XMLAgg function without an alias in the following SQL example?:

我必须使XML符合我无法控制的格式。 它包含一个名为DateRange的标头,然后是查询中的记录。 我可以生成几乎与该格式匹配的XML,不同之处在于我的版本在一个元素(本示例中为DIV)中具有记录:

select
    XMLRoot(
        XMLElement(
            "PayrollAdjustments",
                XMLForest(
                    XMLForest(
                        '2013-09-15' as "From",
                        '2013-09-21' as "To"                    
                    ) as "DateRange",
                    XMLAgg(                  
                        XMLForest(
                            XMLForest(
                                EMPLOYEE as "EmployeeId",
                                STORE AS "StoreNumber",
                                DEPARTMENT AS "Department",
                                WORKCODE AS "AdjustCode",
                                PAYROLL_DATE AS "PayDate",
                                HOURS as "Hours",
                                0 as "Amount"
                            ) AS "PayAdjustment"
                        )   
                    ) AS div
                )
            ),
            VERSION '1.0" encoding="utf-8',
            STANDALONE YES
        ).getClobVal()
from timecard_payroll
where start_date = '2013-09-15'
and end_date = '2013-09-21'
and hours > 0;

这是输出的样子,如您所见,记录位于名为DIV的元素中:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<PayrollAdjustments>
    <DateRange>
        <From>2013-09-15</From>
        <To>2013-09-21</To>
    </DateRange>
    <DIV>
        <PayAdjustment>
            <EmployeeId>262699</EmployeeId>
            <StoreNumber>8159</StoreNumber>
            <Department>1</Department>
            <AdjustCode>91</PayAdjustCode>
            <PayDate>2013-09-16</PayDate>
            <Hours>8.0000</Hours>
            <Amount>0</Amount>
        </PayAdjustment>
        <PayAdjustment>
            <EmployeeId>262916</EmployeeId>
            <StoreNumber>8294</StoreNumber>
            <Department>5</Department>
            <AdjustCode>91</AdjustCode>
            <PayDate>2013-09-19</PayDate>
            <Hours>8.0000</Hours>
            <Amount>0</Amount>
        </PayAdjustment>
    </DIV>  
</PayrollAdjustments>

如何更改查询以摆脱DIV元素,使其看起来像这样?:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<PayrollAdjustments>
    <DateRange>
        <From>2013-09-15</From>
        <To>2013-09-21</To>
    </DateRange>        
    <PayAdjustment>
        <EmployeeId>262699</EmployeeId>
        <StoreNumber>8159</StoreNumber>
        <Department>1</Department>
        <AdjustCode>91</PayAdjustCode>
        <PayDate>2013-09-16</PayDate>
        <Hours>8.0000</Hours>
        <Amount>0</Amount>
    </PayAdjustment>
    <PayAdjustment>
        <EmployeeId>262916</EmployeeId>
        <StoreNumber>8294</StoreNumber>
        <Department>5</Department>
        <AdjustCode>91</AdjustCode>
        <PayDate>2013-09-19</PayDate>
        <Hours>8.0000</Hours>
        <Amount>0</Amount>
    </PayAdjustment>          
</PayrollAdjustments>

提前致谢

尝试将XMLConcatXMLSequenceType结合使用:

select
    XMLRoot(
        XMLElement(
            "PayrollAdjustments",
                XMLForest(
                    XMLForest(
                        '2013-09-15' as "From",
                        '2013-09-21' as "To"                    
                    ) as "DateRange",
                    XMLConcat(XMLSequenceType(XMLAgg(XMLElement("PayAdjustment",
                            XMLForest(
                                EMPLOYEE as "EmployeeId",
                                STORE AS "StoreNumber",
                                DEPARTMENT AS "Department",
                                WORKCODE AS "AdjustCode",
                                PAYROLL_DATE AS "PayDate",
                                HOURS as "Hours",
                                0 as "Amount"
                            ) AS "PayAdjustment"
                    )))
                )
            ),
            VERSION '1.0" encoding="utf-8',
            STANDALONE YES
        ).getClobVal()
from timecard_payroll
where start_date = '2013-09-15'
and end_date = '2013-09-21'
and hours > 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM