2011-04-01 45 views
0

我有以下從一個相當大的XML文件剪斷的代碼,我的工作:查詢XML文檔中的SQL

<Product id="4161" removed="false"> 
    <NativeReviewStatistics> 
     <AverageRatingValues> 
      <AverageRatingValue> 
       <AverageRating>3.0</AverageRating> 
       <RatingDimension> 
        <ExternalId>Quality</ExternalId> 
        <RatingRange>5</RatingRange> 
       </RatingDimension> 
      </AverageRatingValue> 
      <AverageRatingValue> 
       <AverageRating>4.0</AverageRating> 
       <RatingDimension> 
        <ExternalId>Value</ExternalId> 
        <RatingRange>5</RatingRange> 
       </RatingDimension> 
      </AverageRatingValue> 
     </AverageRatingValues> 
    </NativeReviewStatistics> 
</Product> 

我希望得到與看行的最終結果像下面這樣:

 
ProductId | ExternalId | AveRating | RatingRange 
4161  Quality  3.0   5 
4161  Value  4.0   5 

到目前爲止,我有這樣的:

SELECT feed.product.value('@id[1]', 'INT') AS ProductId 
    FROM @xmlData.nodes('/Feed/Product') feed (product) 

但我有點難倒在何處何去何從。有任何想法嗎?

回答

1
SELECT 
    feed.product.value('@id[1]', 'INT') AS ProductId, 
    step3.data.value('ExternalId[1]', 'varchar(50)') AS ExternalId, 
    step2.data.value('AverageRating[1]', 'decimal(10,1)') AS AveRating, 
    step3.data.value('RatingRange[1]', 'int') AS RatingRange 
FROM 
    @xmlData.nodes('/Feed/Product') feed (product) 
CROSS APPLY 
    feed.product.nodes('NativeReviewStatistics/AverageRatingValues/AverageRatingValue') step2(data) 
CROSS APPLY  
    step2.data.nodes('RatingDimension') step3(data)