2017-06-08 11 views
0

テーブルtestAには4列、列Dv_Dataにはxml文字列があります。SQL Serverスクリプトはxml属性とテキスト値をテーブルに変換します

の質問は、どのように私はSQLスクリプトを使用して、この結果を達成することができている

ID X Y Dv_Data 
--------------------------------------------------------------------------- 
101 4 5 <U><V N="TTF">1</V><V N="MF">0</V><V N="ResultA">383.501</V></U> 
102 4 6 <U><V N="TTF">0</V><V N="MF">1</V><V N="ResultA">383.601</V></U> 

種皮?

ID X Y TTF MF ResultA 
--------------------------- 
101 4 5 1 0 383.501 
102 4 6 0 1 383.601 

testAは何百行もあります。

貴重なご意見をお待ちしております。

答えて

1

XMLを使用して列名/値を派生させ、結果をピボットすることができます。例:

DECLARE @TestA TABLE (ID INT, X INT, Y INT, Dv_Data XML); 
INSERT @TestA VALUES 
(101, 4, 5, '<U><V N="TTF">1</V><V N="MF">0</V><V N="ResultA">383.501</V></U>'), 
(102, 4, 6, '<U><V N="TTF">0</V><V N="MF">1</V><V N="ResultA">383.601</V></U>'); 

SELECT * 
FROM 
(
    SELECT T.ID, 
      T.X, 
      T.Y, 
      ColName = A.B.value('@N', 'VARCHAR(MAX)'), 
      ColVal = A.B.value('text()[1]', 'VARCHAR(MAX)') 
    FROM @TestA AS T 
    CROSS APPLY T.Dv_Data.nodes('U/V') AS A(B) 
) AS T 
PIVOT 
(
    MAX(ColVal) FOR ColName IN ([TTF], [MF], [ResultA]) 
) AS P; 
関連する問題