我有一个看起来像这样的表:
[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
答案 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