计算SQL中值的行数?

时间:2016-09-22 11:52:03

标签: sql sql-server sql-server-2005

我有一个看起来像这样的表:

[ContractId]     [ContractDate] [SnapshotTimeId]    [DaysPastDue] [Exposure]

Int(not unique)  Datetime       Int(format20160431) Int           Int

该表按ContractId,ContractDate排序。

现在,我想添加第6列,让我们称之为Unique,第一个ContractId值的值为1,然后加1,直到碰到下一个ContractId。基本上,我想知道每个ContractId有多少行,并逐步将值放在一列中。

编辑:我希望输出看起来像这样

>DocumentId ContractDate    SnapshottimeId  DPD Exposure Unique
>1          31-Aug-15       31-Aug-15       0   500      1
>1          31-Aug-15       30-Sep-15       5   450      2
>1          31-Aug-15       31-Oct-15       35  450      3
>1          31-Aug-15       30-Nov-15       7   350      4
>1          31-Aug-15       31-Dec-15       37  350      5
>1          31-Aug-15       31-Jan-16       67  340      6
>2          31-Aug-15       30-Jun-14       3   800      1
>2          31-Aug-15       31-Jul-14       15  760      2
>2          31-Aug-15       31-Aug-14       45  750      3
>2          31-Aug-15       30-Sep-14       75  750      4
>2          31-Aug-15       31-Oct-14       0   630      5
>2          31-Aug-15       30-Nov-14       15  590      6
>2          31-Aug-15       31-Dec-14       45  580      7

3 个答案:

答案 0 :(得分:3)

我想你想要row_number()

select t.*,
       row_number() over (partition by contractid order by contractdate) as seqnum
from t;

这将增加一个值,我认为你正在描述它。

如果您只想要每行中每个合约的行数,请使用:

select t.*,
       count(*) over (partition by contractid) as cnt
from t;

这会使" 6"在每一行中,如果合同有六行。

答案 1 :(得分:2)

  

第一个ContractId值的值为1,然后加1,直到碰到下一个ContractId

RowNumber将发挥作用

select *,
Row_number() over (partition by contractid order by contractid) as countt
from
table

答案 2 :(得分:0)

如果您想知道表格中的行号,请使用:

Select ContractId, 
    ContractDate, 
    SnapshotTimeId, 
    DaysPastDue, 
    Exposure, 
    row = ROW_NUMBER() OVER(ORDER BY [ContractId] asc) AS Row 
From YourTable