如何对 SQL 表中 XML 列中的节点进行分组计数?

     2023-02-16     151

关键词:

【中文标题】如何对 SQL 表中 XML 列中的节点进行分组计数?【英文标题】:How to group count a node in an XML column in a SQL table? 【发布时间】: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;)。全部在问题内,没有图片。 【参考方案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、运行、测试等。 给你小提琴,现在开心吗?

SQL查询如何对增量键RANK中的相同结果进行单独分组

】SQL查询如何对增量键RANK中的相同结果进行单独分组【英文标题】:SQLqueryhowtogroupseparatelysameresultswihinincrementalkeysRANK【发布时间】:2017-03-0118:27:23【问题描述】:我有A和B列。我需要用以下方式对A列进行分组:2&3、5&6、8&a... 查看详情

如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?

】如何在HiveSQL中对一列中的数据进行分组并将其分布在另一列中?【英文标题】:HowtogroubydatainonecolumnanddistributeitinanothercolumninHiveSQL?【发布时间】:2021-05-0209:54:26【问题描述】:我有以下数据:CompanyIDDepartmentNoofPeopleCountry45390HR1... 查看详情

如何根据另一个表中的索引序列对列中的名称进行排序?

】如何根据另一个表中的索引序列对列中的名称进行排序?【英文标题】:Howtoordernamesinacolumnbasedonanindexsequenceinanothertable?【发布时间】:2021-01-0821:24:40【问题描述】:所以我有3个表Friends和Students,它们都有一个ID列。但在Friends... 查看详情

如何对具有多列的表中的数据进行分组[重复]

】如何对具有多列的表中的数据进行分组[重复]【英文标题】:Howtogroupdatafromtablewithmultiplecolumns[duplicate]【发布时间】:2014-11-2814:34:18【问题描述】:我正在尝试以这种方式使用多列对我的数据进行分组:vargroupedCustomers=listToProces... 查看详情

如何从相关表中对 SQL 中的结果进行分组?

】如何从相关表中对SQL中的结果进行分组?【英文标题】:HowtogroupresultsinSQLfromrelatedtables?【发布时间】:2013-09-2513:04:40【问题描述】:这与earlierquestionIposted有关,但不幸的是,我认为我的问题措辞不够清楚,因为我没有得到问... 查看详情

通过对数据框列中的值进行分组来绘制多个图?

...可视化比较陌生,我很感激任何事情和帮助!我正在研究如何制作多个图,将数据框按一列分组,然后为每个唯一值制作一个图。例如。对于下面的数据集,我想要三个不同的图,每个位置一个,并且我希望能够单独标记它 查看详情

按列值的差异对 SQL 中的数据进行分组

...间】:2018-02-1206:34:32【问题描述】:我在postgres表的日志表中有以下数据:logid=>int(自动递增)start_time=>bigint(存储纪元值)inserted_value=>int以下是存储在表中的数据(其中实际开始时间不是列,只是以U 查看详情

您如何对社交网络节点进行分组?

】您如何对社交网络节点进行分组?【英文标题】:Howdoyougroupsocialnetworknodes?【发布时间】:2017-12-0719:10:17【问题描述】:图由通过边/弧连接的节点/顶点组成。通常存在多个节点子组(下图着色)。这些可以是社交网络中的人... 查看详情

如何使用 SQL Server 中其他表中的列值插入 xml ***属性节点

】如何使用SQLServer中其他表中的列值插入xml***属性节点【英文标题】:HowtoInsertxmltoplevelattributenodesusingacolumnvaluefromothertableinSQLserver【发布时间】:2020-12-1305:35:22【问题描述】:我有一个特定的XML值,包含这样的命名空间:<xmlxm... 查看详情

按列表列中的元素对 Pandas 数据框进行分组

】按列表列中的元素对Pandas数据框进行分组【英文标题】:GroupingPandasDataframebyElementsinColumnofLists【发布时间】:2020-11-0508:13:52【问题描述】:我试图通过按列表列中的元素分组来获取熊猫数据框中列的总和。我将创建一个虚拟数... 查看详情

尽管对所有关键变量进行了分组,SQL 还是重复?

...名称。我正在编写一个查询,其中必要的数据分布在3个表中。我有一个网络,用户从不同节点发送和接收包,我想查看每个用户在每个时期从网络内部的每个节点发送和接收 查看详情

如何根据条件对sql中的行进行分组

】如何根据条件对sql中的行进行分组【英文标题】:Howcanigrouprowsonsqlbaseoncondition【发布时间】:2021-07-1608:00:49【问题描述】:我正在使用redshiftsql,并希望将凭证期重叠的用户分组到一行中(显示最短开始日期和最长结束日期)... 查看详情

当值在sql中重复时如何对列进行分组

】当值在sql中重复时如何对列进行分组【英文标题】:Howtogroupcolumnswhenthevaluerepeatsinsql【发布时间】:2016-03-3106:41:06【问题描述】:我将我的AccessDB连接到一个Excel文件并执行了一些简单的SQL查询,我想做一些我不知道是否可行的... 查看详情

对 pandas 数据框中的连续值进行分组

...计数器差值。仅当值序列大于6时,才需要从CounterDiffrence列中找到连续的值组(使用0单独标识的组)。如果确定了连续值组,则需要找到Time和Counter的最小值和最大值,然后将其附加 查看详情

如何在一列中对数据进行分组?

】如何在一列中对数据进行分组?【英文标题】:Howtogroupdatainsideonecolumn?【发布时间】:2014-02-1703:31:50【问题描述】:我是OracleSQL的新手。我试图显示票的名称、关闭和打开票的数量以及日期。但我无法得到正确的查询。期望的... 查看详情

如何将 sql 中的两个 xml 与出现的节点进行比较?

】如何将sql中的两个xml与出现的节点进行比较?【英文标题】:HowcanIcomparetwoxmlinsqlwithnodesthathasoccurrences?【发布时间】:2021-12-2207:35:49【问题描述】:我需要知道原始xml是否有节点出现,以及我想要比较的第二个xml。可以进行比... 查看详情

如何对 SQL 表中的空值进行线性插值?

】如何对SQL表中的空值进行线性插值?【英文标题】:HowtoundertakelinearinterpolationofnullvaluesinaSQLtable?【发布时间】:2022-01-1615:50:29【问题描述】:我在Databricks中有一个缺失值(null)的SparkSQL表,其格式如下:datepricestockitem_code2020-01-01... 查看详情

在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中 [ORACLE SQL]

】在一列中对具有相同数据的行进行分组,并将其相关数据汇总在另一列中[ORACLESQL]【英文标题】:grouprowswithequaldatainonecolumnandsummingitsrelateddatainanothercolumn[ORACLESQL]【发布时间】:2016-02-1216:58:02【问题描述】:ORACLESQL我有一个表CU... 查看详情