如何根据列

时间:2016-06-16 13:04:12

标签: sql-server database tsql relational-database

我有一个表格,其中包含网站访问者发送的消息。如果访问者发送了多条消息,我希望能够对这些消息进行分组。通过“对这些消息进行分组”,我的意思是显示在网页上分组的消息,而不是根据关系逻辑进行分组。 我想要这样的东西:

s   email           messageid     
1 user1@mail.com     1     
1 user1@mail.com     3    
1 user1@mail.com     143    
2 user2@mail.com     343   
2 user2@mail.com      3   
3 user3@mail.com      3

正如您所看到的,如果电子邮件相同,则“s”列具有相同的编号。

我试过了:

select ROW_NUMBER()  over(partition by m.email order by   m.email ) as s

我明白了:

s   email           messageid     
1 user1@mail.com     1     
2 user1@mail.com     3    
3 user1@mail.com     143    
1 user2@mail.com     343   
2 user2@mail.com      3   
1 user3@mail.com      3

计算每封电子邮件的序列。

1 个答案:

答案 0 :(得分:3)

我认为s是新列?您可以使用DENSE_RANK()窗口功能:

SELECT DENSE_RANK() OVER(ORDER BY t.email) as [s],
       t.email,t.messageid
FROM YourTable t