SQL Server 2005-嵌套XML

SQL Server 2005-嵌套XML,xml,sql-server-2005,Xml,Sql Server 2005,我用这个问题/答案作为出发点 我正在尝试获得这个输出 <Account ExID="Customer Numer 1"> <AccountData> <TwoColumnsChart> <CategoryName ID="Product Line 1"> <ChartName>Prior vs current period sales for Product Line 1

我用这个问题/答案作为出发点

我正在尝试获得这个输出

<Account ExID="Customer Numer 1">
<AccountData>
    <TwoColumnsChart>
            <CategoryName ID="Product Line 1">
                <ChartName>Prior vs current period sales for Product Line 1 </ChartName>
            <ValuesDescriptions>
                <Value1>Target</Value1>
                <Value2>Actual</Value2>
            </ValuesDescriptions>
            <SalesByFields>
                <Field><FieldName>Item</FieldName><FieldValue1>3100 (current Period)</FieldValue1><FieldValue2>2324 (prior Period)</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>3100</FieldValue1><FieldValue2>2324</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
            </SalesByFields>
                <TotalSales>
                    <Field><FieldName>Total prior period</FieldName><FieldValue>$32,211</FieldValue></Field>
                    <Field><FieldName>Total current period</FieldName><FieldValue>$24,215</FieldValue></Field>
                </TotalSales>
            </CategoryName>
            <CategoryName ID="Product Line 2">
                <ChartName>Prior vs current period sales for Product Line 2</ChartName>
            <ValuesDescriptions>
                <Value1>Target</Value1>
                <Value2>Actual</Value2>
            </ValuesDescriptions>
            <SalesByFields>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>3100</FieldValue1><FieldValue2>2324</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
            </SalesByFields>
                <TotalSales>
                    <Field><FieldName>Total prior period</FieldName><FieldValue>$32,211</FieldValue></Field>
                    <Field><FieldName>Total current period</FieldName><FieldValue>$24,215</FieldValue></Field>
                </TotalSales>
            </CategoryName>
            <CategoryName ID="Product Line 3">
                <ChartName>Prior vs current period sales for Product Line 3</ChartName>
            <ValuesDescriptions>
                <Value1>Target</Value1>
                <Value2>Actual</Value2>
            </ValuesDescriptions>
            <SalesByFields>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>3100</FieldValue1><FieldValue2>2324</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>1244</FieldValue1><FieldValue2>1000</FieldValue2></Field>
                <Field><FieldName>Item</FieldName><FieldValue1>2300</FieldValue1><FieldValue2>3000</FieldValue2></Field>
            </SalesByFields>
                <TotalSales>
                    <Field><FieldName>Total prior period</FieldName><FieldValue>$32,211</FieldValue></Field>
                    <Field><FieldName>Total current period</FieldName><FieldValue>$24,215</FieldValue></Field>
                </TotalSales>
            </CategoryName>     
        </TwoColumnsChart>
</AccountData>

这就是我提出的,它以我需要的方式构建了XML。对于任何感兴趣的人来说,这是用于在Pepperi mobile软件上加载仪表板报告的

SELECT (
    SELECT RTRIM(T1.Customer) AS "@ExID",
            (
                SELECT RTRIM(T2.CategoryName) AS "@ID"
                        , 'Prior vs current period sales for ' + RTRIM(T2.CategoryName) AS "ChartName"
                        , 'Target' AS "ValuesDescription/Value1"
                        , 'Actual' AS "ValuesDescription/Value2"
                        ,
                        (
                            SELECT RTRIM(T3.FieldName) AS FieldName
                                    , SUM(T3.FieldValue1) AS FieldValue1
                                    , SUM(T3.FieldValue2) AS FieldValue2
                            FROM #TempTable T3
                            WHERE T2.categoryname = T3.CategoryName AND
                                    T2.Customer = T3.Customer
                            GROUP BY T3.FieldName
                            FOR XML PATH('Field')
                                ,ROOT('SalesByFields')
                                ,TYPE
                        )
                        ,
                        (
                            SELECT T4.FieldName AS FieldName
                                    , SUM(T4.FieldValue) AS FieldValue
                            FROM #CurVsPrior T4
                            WHERE T2.Customer = T4.AddressID AND
                                    T2.CategoryName = T4.Brand
                            GROUP BY  T4.FieldName
                            FOR XML PATH('Field')
                                ,ROOT('TotalSales')
                                ,TYPE
                        )
                FROM #TempTable AS T2
                WHERE T1.Customer = T2.Customer
                GROUP BY T2.CategoryName, T2.Customer
                FOR XML PATH('CategoryName')
                    ,TYPE
            ) AS "AccountData/TwoColumnsChart"
    FROM #TempTable AS T1
    GROUP BY T1.Customer
    FOR XML PATH('Account')
        ,TYPE
    )
用于XML路径(“帐户”)

SELECT (
    SELECT RTRIM(T1.Customer) AS "@ExID",
            (
                SELECT RTRIM(T2.CategoryName) AS "@ID"
                        , 'Prior vs current period sales for ' + RTRIM(T2.CategoryName) AS "ChartName"
                        , 'Target' AS "ValuesDescription/Value1"
                        , 'Actual' AS "ValuesDescription/Value2"
                        ,
                        (
                            SELECT RTRIM(T3.FieldName) AS FieldName
                                    , SUM(T3.FieldValue1) AS FieldValue1
                                    , SUM(T3.FieldValue2) AS FieldValue2
                            FROM #TempTable T3
                            WHERE T2.categoryname = T3.CategoryName AND
                                    T2.Customer = T3.Customer
                            GROUP BY T3.FieldName
                            FOR XML PATH('Field')
                                ,ROOT('SalesByFields')
                                ,TYPE
                        )
                        ,
                        (
                            SELECT T4.FieldName AS FieldName
                                    , SUM(T4.FieldValue) AS FieldValue
                            FROM #CurVsPrior T4
                            WHERE T2.Customer = T4.AddressID AND
                                    T2.CategoryName = T4.Brand
                            GROUP BY  T4.FieldName
                            FOR XML PATH('Field')
                                ,ROOT('TotalSales')
                                ,TYPE
                        )
                FROM #TempTable AS T2
                WHERE T1.Customer = T2.Customer
                GROUP BY T2.CategoryName, T2.Customer
                FOR XML PATH('CategoryName')
                    ,TYPE
            ) AS "AccountData/TwoColumnsChart"
    FROM #TempTable AS T1
    GROUP BY T1.Customer
    FOR XML PATH('Account')
        ,TYPE
    )