在sql查询中分配序列号

时间:2014-05-06 18:54:41

标签: sql sql-server case sequence

我有场景,我必须为每条记录提供序列号。如果序列号不同,则序列号应重新初始化为初始值。

我是这样尝试的

declare @account_no varchar(50)
declare @seq_no int
declare @temp_no int
set @temp_no=1

select 
    (@account_no = (CASE WHEN @account_no <> PN.vst_int_id 
                           THEN PN.vst_int_id
                    END))
    ,(@seq_no = (CASE WHEN @account_no = PN.vst_int_id 
                        THEN @temp_no + 1
                      ELSE 1
                 END))
   ,@seq_no
   ,nte_pri_cd 
from 
   TSM310_PATIENT_NOTES PN
where 
   vst_int_id = '4588611'

1 个答案:

答案 0 :(得分:4)

好消息我们在SQL Server中有Ranking Functions来使这些操作变得非常简单。请注意,它仅适用于Sql Server 2005及更高版本。

select *,
       ROW_NUMBER() OVER (PARTITION BY AccountID ORDER BY SomeColumn) SequenceNumber

from TSM310_PATIENT_NOTES PN