SQL Server:如何按子字符串分组

用户名

我有以下存储过程从表中获取数据。该表有一个“区域”列,其中包含诸如“ APAC:China”等的值,我正在使用该子串函数来删除:及其后面的所有内容。

除了它单独列出所有记录而不是按我的子字符串对它们进行分组之外,下面的方法有效。因此,例如,我有几个区域为“ APAC”的项目,而不是只有一个项目,而所有项目都显示在下面。

我的存储过程:

CREATE PROCEDURE [dbo].[CountRegions]
AS
BEGIN
    SET NOCOUNT ON;
    SELECT      SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region,
                COUNT(*) AS groupCount,
    FROM        SOPR_LogRequests
    WHERE       logStatus = 'active'
    GROUP BY    region
    ORDER BY    groupCount desc, region
    FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks')
END

我的结果:

<ranks>
  <regions>
    <region>APAC</region>
    <groupCount>1</groupCount>
  </regions>
  <regions>
    <region>EMEA</region>
    <groupCount>1</groupCount>
  </regions>
  <regions>
    <region>APAC</region>
    <groupCount>1</groupCount>
  </regions>
  // ...
</ranks>

预期结果:

<ranks>
  <regions>
    <region>APAC</region>
    <groupCount>2</groupCount>
  </regions>
  <regions>
    <region>EMEA</region>
    <groupCount>1</groupCount>
  </regions>
  // ...
</ranks>

这里有人可以帮我吗?

谢谢您的帮助,蒂姆。

dav1dsm1th

group by将不知道是要引用基础列还是函数代码的输出(它将假定基础列),因此您需要将代码重复到group by:-中。

CREATE PROCEDURE [dbo].[CountRegions]
AS
BEGIN
    SET NOCOUNT ON;
    SELECT      SUBSTRING(region, 1, CHARINDEX(':', region) - 1) AS region,
                COUNT(*) AS groupCount,
    FROM        SOPR_LogRequests
    WHERE       logStatus = 'active'
    GROUP BY    SUBSTRING(region, 1, CHARINDEX(':', region) - 1)
    ORDER BY    groupCount desc, region
    FOR XML PATH('regions'), ELEMENTS, TYPE, ROOT('ranks')
END

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Google表格中使用SQL查询按子字符串分组

MS SQL-按concat字符串分组

按格式化字符串分组的 SQL 联合

SQL 按字符串的中间部分分组

MS Sql按子字符串拆分特定列

Power BI上按字符串进行分组的工作方式类似于SQL Server上的STRING_AGG

SQL Server-从字符串位置到字符串结尾的子字符串

SQL Server,如何在仅显示部分字符串的同时按完整字符串排序?

如何在SQL Server中的已知字符之间剪切子字符串

如何在SQL Server中某些字符之间获取子字符串

按空格和“-”分割字符串 SQL Server

SQL Server-按外观替换字符串

SQL Server:按位置插入字符串

在SQL Server中按子查询分组

如何限制子字符串以提取SQL Server中两个空格之间的文本?

如何在SQL Server中使用查找表替换列中的子字符串

如何从SQL Server 2014中的多个分隔符(如“ \”)中提取子字符串?

子字符串和在SQL Server中拆分

SQL Server中的子字符串有问题

从SQL Server表的varchar列获取子字符串

SQL Server更高效的子字符串

提取 REGEXP 子字符串 SQL Server

SQL 字符串分组依据

SQL Server:请求在每次出现相同子字符串之后提取字符串

获取字符串分隔符内的子字符串 SQL Server 2012

下划线之间的子字符串字符串 - SQL Server 2008

SQL Server:如何从SQL字符串获取值

使用 SQL Server 从子字符串位于不同位置的字符串中提取子字符串

如何在SQL中进行子字符串计算?