簡體   English   中英

以XML作為單一扁平行返回SQL查詢

[英]Return SQL Query with XML as a single flattened row

SQL Server 2008R2或2012

是否可以將XML節點查詢作為單行而不是多行返回,其中每個返回項都是新列而不是一行?

例如,XML字段包含以下XML結構:

<MetaFieldData>
  <MetaField>
    <Name>Volume</Name>
    <Value>Large</Value>
  </MetaField>
  <MetaField>
    <Name>Code</Name>
    <Value>3DP</Value>
  </MetaField>
  <MetaField>
    <Name>Photo</Name>
    <Value>foo.png</Value>
  </MetaField>
  <MetaField>
    <Name>CommonName</Name>
    <Value>Foo Bar</Value>
  </MetaField>
</MetaFieldData>

使用以下SQL:

select 
    m.value('Name[1]', 'varchar(100)') as Name,
    m.value('Value[1]', 'varchar(max)') as Value
from MyTable 
cross apply MetaFieldData.nodes('/MetaFieldData/MetaField') as Meta(m)
where Id = 1

結果集將返回:

Name        Value
--------------------
Volume      Large
Code        3DP
Photo       foo.png
CommonName  Foo Bar

您如何將結果集返回為:

Volume     Code     Photo     CommonName
----------------------------------------------
Large      3DP      foo.png   Foo Bar

嘗試這個

SELECT Volume,Code,Photo,CommonName
FROM 
(
    SELECT 
        m.value('Name[1]', 'varchar(100)') as Name,
        m.value('Value[1]', 'varchar(max)') as Value
    FROM MyTable 
    CROSS APPLY MetaFieldData.nodes('/MetaFieldData/MetaField') as Meta(m)
    WHERE Id = 1
) P
PIVOT
(
    MAX(Value) FOR Name IN (Volume,Code,Photo,CommonName)
) pvt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM