Добавить текущий номер в инструкцию select на основе столбца

#sql #sql-server #row

#sql #sql-сервер #строка

Вопрос:

У меня есть представление, receipt_data которое включает в себя столбцы contract_no и receipt_no — что-то вроде этого:

 contract_no | receipt_no | Amount
------------ ------------ ---------
1176        | ABMN1024   |  100 
1176        | ABMN1027   |  767
1176        | ABMN1027   |  345
NULL        | MNDF7132   |  389
NULL        | NULL       |  673
1046        | MDGF2344   |  454
  

Мне нужно запросить это представление с добавленным к нему текущим номером. Текущий номер должен быть добавлен следующим образом.

  run_no    |contract_no | receipt_no | Amount
 ---------- ------------ ------------ --------    
  1        | 1176       | ABMN1024   |  100 
  2        | 1176       | ABMN1027   |  767
           | 1176       | ABMN1027   |  345
  3        | NULL       | MNDF7132   |  389
           | NULL       | NULL       |  673
  4        |1046        | MDGF2344   |  454  
  

Текущий номер должен быть похож

  1. Добавить текущий номер в уникальный contract_no receipt_no
  2. Если receipt_no имеет значение, то верните текущий номер
  3. Если receipt_no равно null, нет необходимости добавлять текущий номер, пропустите его

Возможно ли создать подобный скрипт? Пожалуйста, помогите

Комментарии:

1. вы пробовали использовать dense_rank() ?

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

Ответ №1:

вы можете попробовать с помощью row_number() аналитической функции

 select 
case when receipt_no is not null
then
row_number()over(order by (select null))
else null end as run_no,t.* from
table_name t
  

Комментарии:

1. Это дает только 1 в качестве текущего номера : (

2. Спасибо за помощь. Но это удовлетворяет только условию 3. и текущий номер не в порядке . Это похоже на 1, 3, 2. Также он показывает текущий номер для повторяющихся пар receipt_no, contract_no