我正在尝试查询xml列等...以下查询工作正常...
SELECT
OrderID,
AccountNumber,
ItemID,
substring(replace(lower(s.Street),' ',''),1,8)
+ substring(replace(lower(s.City),' ',''),1,8)
+ substring(replace(lower(s.State),' ',''),1,8)
+ substring(replace(s.ZipCode,' ',''),1,5)AddressHash,
ShipName,
Street,
Street2
City,
State,
ZipCode,
OrderDate
FROM (SELECT UpwardOrderID, AccountNumber, UpwardLeagueID,
/* NOTE THAT THIS SYNTAX WORKS ONLY WORKS BECAUSE THE NODES ARE SINGLETONS. */
x.value('(./ShipTo/Name)[1]', 'VARCHAR(255)') AS ShipName,
x.value('(./ShipTo/Street1)[1]', 'VARCHAR(255)') AS Street,
x.value('(./ShipTo/Street2)[1]', 'VARCHAR(255)') AS Street2,
x.value('(./ShipTo/Subdivision1)[1]', 'VARCHAR(255)') AS City,
x.value('(./ShipTo/Subdivision2)[1]', 'VARCHAR(255)') AS State,
x.value('(./ShipTo/PostalCode)[1]', 'VARCHAR(255)') AS ZipCode,
x.value('(./Order/ClientOrderDate)[1]', 'DATETIME') AS OrderDate
--x.value('(./ShippingMethods/ShippingMethod/ID)[../Selected/text()=1]','VARCHAR(255)')
FROM av_order CROSS APPLY orderXML.nodes('/Order/ShippingInformation') t(x)
WHERE orderXML Is Not Null) s
除了我尝试在FROM子查询中选择的最后一列之外,此查询工作正常。
不同之处在于列(ShippingMethod)不是单身。 XML包含所有送货方式,我想选择SELECTED送货方式的ID。以下是XML的那部分内容......
<Order>...
<ShippingInformation>
<ShipTo>
<Name>DONT SHOW</Name>
<Attention>DONT SHOW</Attention>
<Street1>DONT SHOW</Street1>
<Street2 />
<Subdivision1>DONT SHOW</Subdivision1>
<Subdivision2>IL</Subdivision2>
<PostalCode>62092</PostalCode>
<CountryCode>US</CountryCode>
<AllowEmptyShipTo>0</AllowEmptyShipTo>
<ContactInfo>DONT SHOW</ContactInfo>
</ShipTo>
<ShippingMethods>
<ShippingMethod>
<ID>UPSGROUND</ID>
<Selected>1</Selected>
<Cost>134.08</Cost>
</ShippingMethod>
<ShippingMethod>
<ID>PICKUP</ID>
<Selected>0</Selected>
<Cost>0</Cost>
</ShippingMethod>
<ShippingMethod>
<ID>UPS3DAY</ID>
<Selected>0</Selected>
<Cost>288.46</Cost>
</ShippingMethod>
<ShippingMethod>
<ID>UPS2DAY</ID>
<Selected>0</Selected>
<Cost>347.91</Cost>
</ShippingMethod>
<ShippingMethod>
<ID>UPSNEXTBUSDAY</ID>
<Selected>0</Selected>
<Cost>956.73</Cost>
</ShippingMethod>
</ShippingMethods>
</ShippingInformation>
...</Order>
如何选择SELECTED送货方式ID?
赛斯
答案 0 :(得分:3)
您可以在xQuery表达式中使用针对Selected
的谓词。
这将选择第ShippingMethod
个节点,其中Selected
的值为1
。
x.value('(./ShippingMethods/ShippingMethod[Selected = 1]/ID)[1]','VARCHAR(255)')