SQL Server FOR XML AUTO帮助 - ChildNode名称

时间:2011-05-25 19:36:49

标签: xml sql-server-2008 sqlxml for-xml

我有这个查询

;WITH history_cte AS 
(
    SELECT
     ActivityId [id]
     , Added [activityDate]
     , [Year] [year]
     , Make [make]
     , Model [model]
     , Engine [engine]
     , MricId [mricId]
     , Display [activityDescription]
     , [Header] [header]
     , [VehicleText] [vehicleDescription]
     , ob = CONVERT(VARCHAR(10), Added, 121)
     FROM @top20Activities Activities         
)
, historyDistinct_cte AS (SELECT DISTINCT [header], ob FROM history_cte)

SELECT
    Activities.[header]
    , (
        SELECT
            id
            , activityDate
            , [year]
            , make
            , model
            , engine
            , mricId
            , activityDescription
            , vehicleDescription
        FROM history_cte Activity
        WHERE [header] = Activities.[header]
        ORDER BY ob DESC
        FOR XML AUTO, TYPE
    ) 
FROM historyDistinct_cte Activities
ORDER BY Activities.ob DESC
FOR XML AUTO, TYPE, ROOT ('ActivityHistory')    

它生成[几乎]我需要的XML。子节点简称错误。我已经尝试过多次切换别名,并且不能为我的生活找出正确的方法。我正在获取此XML

 <ActivityHistory>
  <Activities header="Today - Wednesday, May 25, 2011">
    <Activities id="100000" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Maintenance: 0 Miles" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100001" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Maintenance: 44,000 Miles" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100002" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0300" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100003" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0301" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100004" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0311" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100005" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0321" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100006" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0331" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100007" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0341" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100008" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0351" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100009" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0361" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
    <Activities id="100010" activityDate="2011-05-25T00:00:00" year="2011" make="Ford" model="Fusion Hybrid" engine="2.5 L" mricId="1" activityDescription="Diagnostics: P0371" vehicleDescription="2011 Ford Fusion Hybrid 2.5 L" />
  </Activities>
  <Activities header="Tuesday, May 24, 2011">
    <Activities id="100011" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Maintenance: 0 Miles" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100012" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Maintenance: 82,000 Miles" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100013" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Repair: Radiator" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100014" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Repair: Cooling Fan Motor" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100015" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Repair: Ignition Control" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100016" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Repair: Spark Plug Advance" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
    <Activities id="100017" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Repair: Seat Motor" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
   <Activities id="100018" activityDate="2011-05-24T00:00:00" year="2008" make="Mitchell" model="Cooper" engine="1.6 L" mricId="1" activityDescription="Diagnostics: P112" vehicleDescription="2008 Mitchell Cooper 1.6 L" />
 </Activities>
  <Activities header="Sunday, May 22, 2011">
    <Activities id="100019" activityDate="2011-05-22T00:00:00" year="2007" make="Chevrolet" model="Camaro" engine="400cc" mricId="1" activityDescription="Maintenance: 0 Miles" vehicleDescription="2007 Chevrolet Camaro 400cc" />
  </Activities>
</ActivityHistory>

如何更正问题,以便正确命名[Activity]子节点。我觉得我很亲密。感谢您提供任何帮助,提示或技巧。

在圣地亚哥欢呼,〜ck

1 个答案:

答案 0 :(得分:0)

你能为最后的SELECT尝试这个吗?

SELECT
    Activities.[header], 
    (SELECT
            id
            , activityDate
            , [year]
            , make
            , model
            , engine
            , mricId
            , activityDescription
            , vehicleDescription
     FROM history_cte Activity
     WHERE [header] = Activities.[header]
     ORDER BY ob DESC
     FOR XML PATH('Activity'), TYPE
    ) 
FROM historyDistinct_cte Activities
ORDER BY Activities.ob DESC
FOR XML AUTO, TYPE, ROOT ('ActivityHistory')  

我将嵌套选择中的FOR XML AUTO, TYPE替换为FOR XML PATH('Activity'), TYPE - 这样做是否符合您的要求?