Справка по SQL Server FOR XML AUTO - имя дочернего узла - PullRequest
1 голос
/ 25 мая 2011

У меня есть этот запрос

;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 голосов
/ 26 мая 2011

Можете ли вы попробовать это для вашего окончательного 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 - это делает то, что вы ищете ??

...