【问题标题】:SQL Server: How to group by substringSQL Server:如何按子字符串分组
【发布时间】:2013-12-18 05:16:42
【问题描述】:

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

除了它单独列出所有记录而不是按我的子字符串对它们进行分组之外,以下工作。所以我有例如区域为“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>

这里的任何人都可以帮助我吗?

感谢您的帮助,蒂姆。

【问题讨论】:

    标签: sql sql-server stored-procedures group-by substring


    【解决方案1】:

    您的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
    

    【讨论】:

    • 实际上,如果别名与字段名不同,并且您按别名分组,则sql-server会向您吠叫。
    • 非常感谢 - 已解决! :)
    • @DanBracuk - 绝对正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2014-03-21
    • 2021-10-05
    • 2016-03-29
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多