统计按备注分组的记录数

问题描述 投票:0回答:2

如何统计每条评论的记录数?每个备注在备注列值内都有不同的编号。我需要根据备注内容对记录进行分组,而不是使用

cid###
。需要按备注分组,但是每个备注都有一些cid的动态变量。不包括cid号需要分组

示例 -

Remarks
:

Remark1-cid11
Remark1-cid22
Remark1-cid33

Group1 的数量应为 3

样本数据

Remark                Id    CreatedOn                        ProcessName
------------------------------------------------------------------------
Remark1-cid22          1    2023-12-27 18:02:54.4102746      P1
Remark2-cid23          2    2023-12-27 18:02:54.4102746      P1
Remark3-cid24          3    2023-12-27 18:02:54.4102746      P1
Remark4-cid25          4    2023-12-27 18:02:54.4102746      P1
Remark1-cid26          5    2023-12-27 18:02:54.4102746      P1
Remark2-cid27          6    2023-12-27 18:02:54.4102746      P1
Remark3-cid28          7    2023-12-27 18:02:54.4102746      P1
Remark4-cid29          8    2023-12-27 18:02:54.4102746      P1

所需输出

CreatedOn  Remark   Count   Group 
-----------------------------------
2023-12-27 Remark1   2      Group1
2023-12-27 Remark2   2      Group2
2023-12-27 Remark3   2      Group3
2023-12-27 Remark4   2      Group4 

我尝试过的查询

select 
    Remark, Count (Id) 
from 
    IPocumentRequests
group by 
    Remark
having 
    Remark like '%Remark1%' 
    or Remark like '%Remark2%' 
    or Remark like '%Remark3%'  
    or Remark like '%Remark4%'

输出

Remark        (No column Name)
------------------------------
Remark1 -cid11       1
Remark2 -cid22       1
Remark3-cid33        1
Remark4-cid44        1
Remark1-cid55        1
Remark2-cid66        1
Remark3-cid77        1
Remark4-cid88        1
sql sql-server group-by count having
2个回答
2
投票

检查这个解决方案,我使用了通用表表达式,这是处理大数据的更快方法。

WITH aa AS (
  SELECT 
    CONVERT(DATE, created_on) AS created_on,
    SUBSTRING(Remark, 1, CHARINDEX('-', Remark) - 1) AS Remark_modified,
    CASE
      WHEN Remark LIKE '%Remark1%' THEN 'group1'
      WHEN Remark LIKE '%Remark2%' THEN 'group2'
      WHEN Remark LIKE '%Remark3%' THEN 'group3'
      WHEN Remark LIKE '%Remark4%' THEN 'group4'
      ELSE Remark
    END AS Group_num
  FROM 
    your_table_name
)

SELECT 
  created_on,
  Remark_modified,
  Group_num,
  COUNT(*) AS count
FROM 
  aa
GROUP BY 
  created_on,
  Remark_modified,
  Group_num;


0
投票

从备注栏中过滤出真正的备注,并对其进行分组:

select  the_real_remark
,       count(*)
from    (
        select  left(remark, charindex('-', remark) - 1) as
                    the_real_remark
        from    YourTable
        ) as SubQueryAlias
group by
        the_real_remark
© www.soinside.com 2019 - 2024. All rights reserved.