【发布时间】:2015-03-06 13:34:16
【问题描述】:
我有一个 SQL Server 表,它的 XML 列具有如下数据。表中将有多个记录。 让我们说表 T1 和列 C1。
我们的要求是我们需要获取最新数据(对于 AAA、BB、CC 等各个部分,按 datereported、datecreated、dateupdated XML 节点的最大值)。
<XMLDoc>
<AAA>
<Name>Name_A</Name>
<Value>Val_A</Value>
<dateReported>1/1/2001</dateReported>
</AAA>
<AAA>
<Name>Name_B</Name>
<Value>Val_B</Value>
<dateReported>1/1/2014</dateReported>
</AAA>
<AAA>
<Name>Name_C</Name>
<Value>Val_C</Value>
<dateReported>1/1/2012</dateReported>
</AAA>
<AAA>
<Name>Name_D</Name>
<Value>Val_D</Value>
<dateReported>1/1/2011</dateReported>
</AAA>
<BB>
<ID>112</ID>
<dateCreated>1/1/2011</dateCreated>
</BB>
<BB>
<ID>121</ID>
<dateCreated>1/1/2012</dateCreated>
</BB>
<BB>
<ID>12</ID>
<dateCreated>1/1/2015</dateCreated>
</BB>
<CC>
<Type>XML</Type>
<dateUpdated>1/1/2015</dateCreated>
</CC>
<CC>
<Type>TXT</Type>
<dateUpdated>3/3/2015</dateUpdated>
</CC>
<CC>
<Type>XLS</Type>
<dateUpdated>2/2/2015</dateUpdated>
</CC>
</XMLDoc>
我在下面写了 SQL
SELECT
ID,
Name = C1.value('(/XMLDoc/AAA/Name)[1]', 'varchar(100)'),
Value = C1.value('(/XMLDoc/AAA/Value)[1]', 'varchar(100)'),
BB_ID = C1.value('(/XMLDoc/BB/ID)[1]', 'int'),
CC_Type = C1.value('(/XMLDoc/CC/Type)[1]', 'varchar(50)')
From T1
我们需要输出为
Id Name, Value, BB_ID, CC_Type
1 Name_B Val_B 12 TXT
需要您的意见
【问题讨论】:
标签: sql sql-server sql-server-2012 sqlxml