Sql XQuery-count+;节点值

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保存在单独的行中,所以一行一行。

我有一个小问题,就是如何计算某些东西的数量以及它的父节点的值。 实际上,xml模式如下所示:


1.
1.
2.

嗯,或多或少。。。我试图实现的是:通过使用XQuery(这是很重要的一部分),我需要返回每辆车有多少修复(我知道在这个示例中只有一辆车)。所以我需要得到类似于12或类似的结果。 任何帮助都将不胜感激

编辑:

1.
1.
1.
2.


现在我想要更麻烦一点的;/我在sql server中有XMLcolumn,它将sqldocument for car保存在单独的行中,所以一行一行。我想进一步做的是为每个修复量最多的部门获取carID。有线索吗/

修复结束标记
后,您可以应用xpath
count
聚合来返回修复的
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