Sql XQuery-count+;节点值
我有一个小问题,就是如何计算某些东西的数量以及它的父节点的值。 实际上,xml模式如下所示:Sql XQuery-count+;节点值,sql,sql-server,count,xquery,Sql,Sql Server,Count,Xquery,我有一个小问题,就是如何计算某些东西的数量以及它的父节点的值。 实际上,xml模式如下所示: 1. 1. 2. 嗯,或多或少。。。我试图实现的是:通过使用XQuery(这是很重要的一部分),我需要返回每辆车有多少修复(我知道在这个示例中只有一辆车)。所以我需要得到类似于12或类似的结果。 任何帮助都将不胜感激 编辑: 1. 1. 1. 2. 现在我想要更麻烦一点的;/我在sql server中有XMLcolumn,它将sqldocument for car保存在单独的行中,所以一行一行。
1.
1.
2.
嗯,或多或少。。。我试图实现的是:通过使用XQuery(这是很重要的一部分),我需要返回每辆车有多少修复(我知道在这个示例中只有一辆车)。所以我需要得到类似于12或类似的结果。
任何帮助都将不胜感激
编辑:
1.
1.
1.
2.
现在我想要更麻烦一点的;/我在sql server中有XMLcolumn,它将sqldocument for car保存在单独的行中,所以一行一行。我想进一步做的是为每个修复量最多的部门获取carID。有线索吗/ 修复结束标记
后,您可以应用xpathcount
聚合来返回修复的count
:
DECLARE @xml XML =
'<car>
<carID> 1 </carID>
<fixes>
<fix>
<fixID> 1 </fixID>
<fixID> 2 </fixID>
</fix>
</fixes>
</car>';
SELECT
Nodes.node.value('(carID)[1]', 'int') AS Car,
Nodes.node.value('count(fixes/fix/fixID)', 'int') AS Fixes
FROM
@xml.nodes('//car') AS Nodes(node);
每个
fix
是否都有fixid
?(你的例子中有两个fix
)你确实是对的,这是我的错误,非常感谢。但现在我有了一点不同的问题。我在SQLServer中有XML实例。如果可能的话,请检查主帖子中的编辑。无论如何谢谢你!我已经更新了,上面。下一次,请提出一个新问题(您将接触到更广泛的受众,可能会更快地解决问题)。这看起来像是带有一些嵌入Xpath表达式的SQL。为什么要将其标记为xquery?@charlessross可能会帮助youYikes-MS“xquery”是xquery标准的一部分,就像旧的Jscript是Javascript一样。它在这里提出了一个标记问题。
WITH cteCarFixes AS
(
SELECT
Nodes.node.value('(carID)[1]', 'int') AS CarId,
Nodes.node.value('(departmentID)[1]', 'int') AS DepartmentId,
Nodes.node.value('count(fixes/fix/fixID)', 'int') AS Fixes
FROM
CarFixes cf
CROSS APPLY cf.SomeXml.nodes('//car') as Nodes(node)
),
cteRankedCarFixes AS
(
SELECT CarId, DepartmentId, Fixes,
ROW_NUMBER() OVER(PARTITION BY DepartmentId ORDER BY Fixes DESC) AS Ranking
FROM
cteCarFixes cf
)
SELECT DepartmentId, CarId, Fixes
FROM
cteRankedCarFixes
WHERE
Ranking = 1