sql - 将多个 xml 元素分解为多个列
问题描述
我正在尝试将此 xml 列分解为多个 xml 列,但它似乎格式错误。
这是我使用 xml path() 的数据
<claim id="1111111">
<InsHistDB>2</InsHistDB>
<ClaimHistID>111111</ClaimHistID>
<PatID>00000001</PatID>
<ProcedureData>
<row proc_logid="0000009" proc_logdb="1000000" createdate="2000-09-21T00:00:00" pldate="2000-09-21T00:00:00" adacode="D0120" />
<row proc_logid="1211557" proc_logdb="1000010" createdate="2015-09-21T00:00:00" pldate="2015-09-21T00:00:00" adacode="D0220" />
<row proc_logid="1211558" proc_logdb="1000010" createdate="2015-09-21T00:00:00" pldate="2015-09-21T00:00:00" adacode="D0230" />
<row proc_logid="1211556" proc_logdb="1000010" createdate="2015-09-21T00:00:00" pldate="2015-09-21T00:00:00" adacode="D0272" />
</ProcedureData>
</claim>
select语句目前是这个
SELECT TOP (1000) [ClaimID] as '@id'
,[InsHistDB]
,[ClaimHistID]
,[PatID]
-- ,[ProcedureData].value('declare namespace ns= "ProcedureData"; (/ns:ProcedureData/ns:row[1])','nvarchar(50)') as pp
,[ProcedureData]
--,[ProcedureData].query('proc_logid').value('.','varchar(50)') as 'proc_1'
FROM [Mine].[dbo].[claim]
where claimid=1111111
FOR XML PATH('claim')
我想要做的是将 {Proc_Log_id} 分成不同的列,以便该行应该读取。
Claim ID INSHISTDB CLaimHistID PATID Proc_Id1 Proc_ID2 ProcID3 procID4
11111 2 1111111 000000001 0000009 1211557 1211558 1211556
这是可能的还是我只是在旋转我的轮子?这也适用于多个 patid,因此预期没有 where 子句的查询。另外我相信每个 xml 数据点最多可以有 10 个 proc_logid。我对空值很好,因为我计划对这些数据进行透视和规范化。
谢谢阅读。
解决方案
选择第三个节点的语法是column.value('(/foo/bar)[3]','varchar(25)')
.
您考虑其他选择是正确的。特别是“查询”或“节点”函数更适合,因为它们可以将值作为第二个结果集或新的 XML 文档返回。
推荐阅读
- css - 实现 CSS 垂直对齐扭曲宽度
- excel - 在VBA中保持零
- php - PHP函数没有正确执行?
- node.js - mongoose 中的 create 函数有什么作用?
- c - 'strtold' 的冲突类型
- ubuntu - 为什么 WSL Ubuntu Terminal 不显示应用程序版本而是运行它?
- azure - Azure 的 Kubernetes 清单文件
- python - opencv python AttributeError
- python-3.x - 为什么我不能从 python 的异常中返回我的局部变量?
- python - sudo pip 成功安装后的 ModuleNotFoundError