2016-09-22 8 views
1

У меня есть таблица, которая выглядит следующим образом:Подсчитайте, сколько строк для значения в SQL?

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

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

таблица сортируется по ContractId, ContractDate.

Теперь я хотел бы добавить 6-й столбец, назовем его уникальным, который имеет значение 1 для первого значения ContractId, затем добавляет 1 до тех пор, пока он не столкнется со следующим контрактом. В принципе, я хочу знать, сколько строк у меня для каждого ContractId, и поэтапно поместить значения в столбец.

Edit: Я хочу, чтобы выход выглядеть как этот

>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 
+2

Можете ли вы показать пример ввода образца и exp ected output – TheGameiswar

+0

Укажите пример данных – Wanderer

+0

Когда вы говорите «добавить шестой столбец», вы имеете в виду физическое сохранение его в базе данных или создание этого значения при выборе данных? – Jamiec

ответ

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» в каждой строке, если есть шесть строк для контракта.

+0

Спасибо! row_number - это то, что я искал! –

2

, который имеет значение 1 для первого значения ContractId затем добавляет 1, пока не натыкается через следующий ContractId

RowNumber будет делать трюк

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

Если вы хотите знать линию номер в вашем столе, просто используйте это:

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

 Смежные вопросы

  • Нет связанных вопросов^_^