0

SQLサーバーに[QueryResult]という名前のテーブルがあり、Init型、XML型の列があります。

結果列データのサンプルXMLは次のとおりです。

<OUTPUT>
<item>
    <VALUE001>2023038.09</VALUE001>
    <VALUE002>265127.97</VALUE002>
    <VALUE003>459868.86</VALUE003>
    <VALUE004>16000.01</VALUE004>
    <VALUE005>552010.15</VALUE005>
    <VALUE006>21404.96</VALUE006>
<item>
<item>
    <VALUE001>15655501.89</VALUE001>
    <VALUE002>17172.50</VALUE002>
    <VALUE003>8345.31</VALUE003>
    <VALUE004>-117264374.12</VALUE004>
    <VALUE005>-160893.48</VALUE005>
</item>
</OUTPUT>

次のように出力を返すクエリが必要です。

id      Element          Value
-----------------------------------
1   VALUE001     2023038.09
2   VALUE001    2023038.09
3   VALUE002    265127.97
4   VALUE003    459868.86
5   VALUE004    16000.01
6   VALUE005    552010.15 
7   VALUE006    21404.96
8   VALUE001    15655501.89
9   VALUE002    17172.50
10  VALUE003    8345.31
11  VALUE004    -117264374.12
12  VALUE005    -160893.48

質問が明確でない場合はお知らせください。

4

1 に答える 1

1

これが1つの解決策です:

DECLARE @xml XML = 
'
<OUTPUT>
<item>
    <VALUE001>2023038.09</VALUE001>
    <VALUE002>265127.97</VALUE002>
    <VALUE003>459868.86</VALUE003>
    <VALUE004>16000.01</VALUE004>
    <VALUE005>552010.15</VALUE005>
    <VALUE006>21404.96</VALUE006>
</item>
<item>
    <VALUE001>15655501.89</VALUE001>
    <VALUE002>17172.50</VALUE002>
    <VALUE003>8345.31</VALUE003>
    <VALUE004>-117264374.12</VALUE004>
    <VALUE005>-160893.48</VALUE005>
</item>
</OUTPUT>
'

SELECT  T.c.value('local-name(.)[1]', 'varchar(100)') AS Element,
        T.c.value('./text()[1]', 'decimal(17,2)') AS Value
FROM   @xml.nodes('//item/child::node()') T(c);

ノードの順序位置を返すことは、見た目よりも困難です。この質問は1つの解決策を示唆していますが、少しハックなので、ここでは実装していません。

于 2011-07-22T12:54:45.700 に答える