【问题标题】:How to group count a node in an XML column in a SQL table?如何对 SQL 表中 XML 列中的节点进行分组计数?
【发布时间】:2021-11-17 03:47:26
【问题描述】:

我有一些 XML 数据存储在 SQL 表的列中,我需要获取其中一个 XML 项目组计数的所有变量。

查询如下所示:

select fd.stdFormData 
from formdata fd   
where fd.FormType = '1X'

返回的数据如下:

我需要对treatmentDiscussed 的结果进行分组计数,以获得如下所示的结果:

我在处理 SQL Server 表中的 XML 数据方面非常新手,因此我将不胜感激。提前致谢。

这是我目前所拥有的示例。不幸的是,由于返回的值也可能会出现子查询错误

子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一个表达式。

declare @Data XML ,
@treatmentReferrals varchar(50)   
select   @Data  =  (select  fd.Data from  formdata fd   where  fd.FormType  =  '1X' ) 
SELECT     @Data.value('(/root//treatmentDiscussed/node())[1]', 'nvarchar(max)') as treatmentDiscussed  
select  @treatmentReferrals = (SELECT     @Data.value('(/root//treatmentDiscussed/node())[1]', 'nvarchar(max)') as treatmentDiscussed )
 CREATE TABLE #Data
( 
treatmentReferrals VARCHAR(30) 
) 
INSERT INTO #Data (treatmentDiscussed)
VALUES (@treatmentDiscussed) 
 
 DROP TABLE #Data 

【问题讨论】:

  • 消耗性样本数据,而不是图像,可以帮助我们为您提供帮助。
  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。全部在问题内,没有图片。

标签: sql sql-server xml


【解决方案1】:

一旦您使用 XQuery 提取了相关值,GROUP BY 应该可以解决问题:

SELECT
  v.stdFormData,
  COUNT(*) count
FROM formdata fd   
CROSS APPLY fd.stdFormData.nodes('root/treatmentDiscussed') x(td)
CROSS APPLY (VALUES (td.value('text()[1]','nvarchar(10)'))) v(stdFormData)
WHERE fd.FormType = '1X'
GROUP BY
  v.stdFormData;

db<>fiddle

【讨论】:

  • OP 没有提供最小的可重现示例。不幸的是,您的答案也存在同样的问题。无法将其复制到 SSMS、运行、测试等。
  • 给你小提琴,现在开心吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2014-06-10
  • 1970-01-01
  • 2021-03-14
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多