首页 > 解决方案 > 分组依据,连续不止一次

问题描述

我想找到我连续多次出现的所有记录。

样本数据:

NAME 
---- 
 B    
 B    
 B    
 C    
 C    
 A
 C
 A
 A    

结果:

NAME COUNT
---- ---- 
 B    3   
 C    2 
 A    2      

标签: sqlsql-servertsql

解决方案


如问题下的评论中所述,您需要一个额外的列来执行此操作;如果你不这样做,这是不可能的。尽管您可以执行以下操作,但您可以使用附加的始终升序的列:

CREATE TABLE #T (ID int, [Name] char(1));
INSERT INTO #T
VALUES(1,'B'),    
      (2,'B'),    
      (3,'B'),    
      (4,'C'),    
      (5,'C'),    
      (6,'A'),
      (7,'C'),
      (8,'A'),
      (9,'A');
GO

WITH Grps AS(
    SELECT [Name],
           ROW_NUMBER() OVER (ORDER BY ID) - 
           ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY ID) AS Grp
    FROM #T)
SELECT [Name],
       COUNT([Name]) AS [Count]
FROM Grps
GROUP BY [Name],
         Grp
HAVING COUNT([Name]) >= 2
ORDER BY [Count] DESC,
         Grp DESC;


GO
DROP TABLE #T;

推荐阅读