2013-10-10 3 views
3

У меня есть таблица с данными:Создание XML с SQL Server

itemID   itemLocation quantity 
------------------------------------------------------- 
B008KZK44E COMMITED 1 
B008KZK44E PRIME  1 
B008KZK2LE COMMITED 1 

мне нужно сгенерировать XML с этой структурой узла:

<inventoryItemData> 
    <itemID type="FAMILY">B008KZK2LE</itemID> 
    <availabilityDetail> 
    <itemQuantity> 
     <quantity unitOfMeasure="EA">1</quantity> 
     <itemLocation>COMMITED</itemLocation> 
    </itemQuantity> 
    </availabilityDetail> 
</inventoryItemData> 
<inventoryItemData> 
    <itemID type="FAMILY">B008KZK44E</itemID> 
    <availabilityDetail> 
    <itemQuantity> 
     <quantity unitOfMeasure="EA">1</quantity> 
     <itemLocation>COMMITED</itemLocation> 
    </itemQuantity> 
    </availabilityDetail> 
    <availabilityDetail> 
    <itemQuantity> 
     <quantity unitOfMeasure="EA">1</quantity> 
     <itemLocation>PRIME</itemLocation> 
    </itemQuantity> 
    </availabilityDetail> 
</inventoryItemData> 

Чем ближе я получаю это:

SELECT 
    'itemID' AS 'itemID/@type', 
    itemID AS 'itemID', 
    '' AS 'availabilityDetail', 
    '' AS 'availabilityDetail/itemQuantity', 
    'EA' AS 'availabilityDetail/itemQuantity/quantity/@unitOfMeasure', 
    quantity AS 'availabilityDetail/itemQuantity/quantity', 
    itemLocation AS 'availabilityDetail/itemQuantity/itemLocation' 
FROM TABLE 
FOR XML PATH ('inventoryItemData') 

Буду признателен за любые решения.

Спасибо.

ответ

5
select 
    'FAMILY' AS 'itemID/@type', 
    t1.itemID AS 'itemID', 
    (
     select 
     'EA' AS 'itemQuantity/quantity/@unitOfMeasure', 
     t2.quantity AS 'itemQuantity/quantity', 
     t2.itemLocation AS 'itemQuantity/itemLocation' 
     from Table1 as t2 
     where t2.itemID = t1.itemID 
     for xml path('availabilityDetail'), type 
    ) 
from Table1 as t1 
group by t1.itemID 
for xml path ('inventoryItemData') 

sql fiddle demo

+0

он отлично работает! – user2867895

3

Это то, что вы хотите?

SELECT 
    'FAMILY' AS 'itemID/@type', 
    itemID AS 'itemID', 
    '' AS 'availabilityDetail', 
    '' AS 'availabilityDetail/itemQuantity', 
    'EA' AS 'availabilityDetail/itemQuantity/quantity/@unitOfMeasure', 
    quantity AS 'availabilityDetail/itemQuantity/quantity', 
    itemLocation AS 'availabilityDetail/itemQuantity/itemLocation' 
FROM @t 
FOR XML PATH ('inventoryItemData') 
Смежные вопросы