【发布时间】:2021-08-05 21:45:21
【问题描述】:
一些供应商定期发布带有商品价格的 XML 文件。文件中有两种价格:目录价格(list Price)和折扣价(discount Price)
<prices>
<price>
<itemNumber>100</itemNumber>
<currency>PLN</currency>
<amount>2.98</amount>
<type>listPrice</type>
</price>
<price>
<itemNumber>100</itemNumber>
<currency>PLN</currency>
<amount>1.19</amount>
<type>discountPrice</type>
</price>
<price>
<itemNumber>101</itemNumber>
<currency>PLN</currency>
<amount>3.88</amount>
<type>listPrice</type>
</price>
<price>
<itemNumber>101</itemNumber>
<currency>PLN</currency>
<amount>2.76</amount>
<type>discountPrice</type>
</price>
<price>
<itemNumber>102</itemNumber>
<currency>PLN</currency>
<amount>4.55</amount>
<type>listPrice</type>
</price>
<price>
<itemNumber>102</itemNumber>
<currency>PLN</currency>
<amount>3.20</amount>
<type>discountPrice</type>
</price>
<price>
<itemNumber>103</itemNumber>
<currency>PLN</currency>
<amount>3.38</amount>
<type>listPrice</type>
</price>
<price>
<itemNumber>103</itemNumber>
<currency>PLN</currency>
<amount>2.90</amount>
<type>discountPrice</type>
</price>
<price>
<itemNumber>104</itemNumber>
<currency>PLN</currency>
<amount>2.98</amount>
<type>listPrice</type>
</price>
<price>
<itemNumber>104</itemNumber>
<currency>PLN</currency>
<amount>1.19</amount>
<type>discountPrice</type>
</price>
</prices>
目前我正在将 XML 文件上传到数据库,然后我正在使用从 xml 表中获取的数据创建 tmp 表。
SELECT
@SupplierID AS SupplierID
, a.product.query('itemNumber').value('.', 'varchar(50)') AS SupplierCode
, a.product.query('amount').value('.', 'MONEY') AS PricePLN
, a.product.query('type').value('.', 'varchar(50)') AS NetPriceTypePLN
, GETDATE() AS CreateDate
INTO Prices_tmp
FROM ImportedXML x(nolock)
OUTER APPLY x.xmlData.nodes('prices/price') as a(product)
where
x.Fileid = 111
我正在努力解决的问题是如何读取 XML 以在一行中获取两个价格 喜欢:
ItemNumber | ListedPriceAmount | discountPriceAmount
100 | 2.98 | 1.19
101 | 3.88 | 2.76
102 | 4.55 | 3.20
103 | 3.38 | 2.90
你能帮帮我吗?我花了很多时间自己尝试。
【问题讨论】:
-
是某种 XML 结构。与表中的数据是什么样的有关?样本数据和期望的结果会有所帮助。
-
商品编号 = (string), Currency = (string), Price
= (integer), Type of price = (string) -
见下文。您的价格是示例中的根源:docs.microsoft.com/en-us/sql/t-sql/xml/…
-
是整个 XML 还是您有多个
<price>节点,或者可能有多个<prices>节点? -
我有多个
节点但只有一个
标签: sql sql-server xml tsql xquery