【问题标题】:Counting rows in SQL Server by substrings通过子字符串计算 SQL Server 中的行数
【发布时间】:2014-08-28 15:30:54
【问题描述】:

我正在使用 SQL Server 2008 R2。目前,我有一个如下所示的表:

   Text      DateLogged  SomeID  SomeOtherID
-----------------------------------------------
1234: Data   04/04/2014    1        190
3212: Text   04/04/2014    1        190
4332: Data   04/04/2014    1        190
1256: Data   04/04/2014    1        190

以及以下 SQL 查询:

SELECT RIGHT(Text, LEN(Text) - CHARINDEX(':', Text) - 1) AS Sub, DateLogged, SomeID, SomeOtherID
FROM   Example
WHERE  SomeOtherID = 190

我想为我正在使用 SSRS 构建的报告获取具有相同子字符串 (Sub) 的行数。但是,我似乎找不到将按子字符串查询结果(仅供参考,DateLogged 和 SomeID 字段用于报告中的分组)。报告如下所示:

Month    SomeID     Sub     Count
---------------------------------
April
            1
                    Data      3
                    Text      1

任何解决方案,无论是查询级别还是报告级别,都将不胜感激!

【问题讨论】:

    标签: sql tsql sql-server-2008-r2 ssrs-2008-r2


    【解决方案1】:

    这会计算子字符串:

    SELECT RIGHT(Text, LEN(Text) - CHARINDEX(':', Text) - 1) AS Sub, count(*)
    FROM   Example
    WHERE  SomeOtherID = 190
    GROUP BY RIGHT(Text, LEN(Text) - CHARINDEX(':', Text) - 1);
    

    如果你想要日期和其他 id:

    SELECT datepart(month, datelogged) as mon,
           RIGHT(Text, LEN(Text) - CHARINDEX(':', Text) - 1) AS Sub,
           someotherid, count(*)
    FROM   Example
    WHERE  SomeOtherID = 190
    GROUP BY datepart(month, datelogged) as mon,
             RIGHT(Text, LEN(Text) - CHARINDEX(':', Text) - 1),
             SomeOtherId;
    

    【讨论】:

    • 这真的很接近我想要的,但我得到的每一行的计数为 1(换句话说,每一行都是独立计算的,并且具有相同子字符串的行是'没有被添加在一起)。
    • 也许字符串只出现一次?或者,有隐藏的角色让他们与众不同?
    • 当我选择将 Sub 视为一个组时,它会将它们视为相同的字符串。但是当它被视为详细信息行时,它不会将它们加在一起。我开始认为这是 SSRS 的特性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2019-08-03
    • 2017-09-29
    • 2021-01-24
    • 2017-10-20
    • 2023-03-28
    相关资源
    最近更新 更多