sql - 是否可以使用 SQL 将身份添加到 GROUP BY?

标签 sql sql-server tsql row-number

是否可以向 GROUP BY 添加标识列,以便每个重复项都有一个标识号?

我的原始数据如下所示:

1    AAA  [timestamp]
2    AAA  [timestamp]
3    BBB  [timestamp]
4    CCC  [timestamp]
5    CCC  [timestamp]
6    CCC  [timestamp]
7    DDD  [timestamp]
8    DDD  [timestamp]
9    EEE  [timestamp]
....

我想将其转换为:

1    AAA   1
2    AAA   2
4    CCC   1
5    CCC   2
6    CCC   3
7    DDD   1
8    DDD   2
...

解决方案是:

CREATE PROCEDURE [dbo].[RankIt]
AS
BEGIN
SET NOCOUNT ON;

SELECT  *, RANK() OVER(PARTITION BY col2 ORDER BY timestamp DESC) AS ranking 
FROM MYTABLE;

END

最佳答案

您可以尝试使用 ROW_NUMBER如果您使用的是 Sql Server 2005

DECLARE @Table TABLE(
        ID INT,
        Val VARCHAR(10)
)

INSERT INTO @Table SELECT 1,'AAA'
INSERT INTO @Table SELECT 2,'AAA'
INSERT INTO @Table SELECT 3,'BBB' 
INSERT INTO @Table SELECT 4,'CCC' 
INSERT INTO @Table SELECT 5,'CCC' 
INSERT INTO @Table SELECT 6,'CCC' 
INSERT INTO @Table SELECT 7,'DDD' 
INSERT INTO @Table SELECT 8,'DDD' 
INSERT INTO @Table SELECT 9,'EEE' 

SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY VAL ORDER BY Val)
FROM    @Table

关于sql - 是否可以使用 SQL 将身份添加到 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066178/

相关文章:

MySQL 将行转为动态数量的列

c# - Visual Studio 说我试图将 NULL 插入到 "id"表的 "Cars_details"记录中

sql-server - 如何将表移动到 T-SQL 中的架构中

sql-server - SSIS - 传输 SQL Server 对象任务 - SMO 连接管理器问题

c# - Entity Framework - 通过拆分使大型 edmx 表更易于管理?

sql-server - 如何处理删除可能是 FK 的数据库记录?

tsql - T-SQL 中的单行 IF

sql - 来自多个表的关联 SQL 连接查询

sql - 线索和案例表达

SQL Server 查询 - 哪个性能更好?