#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
Текущий номер должен быть похож
- Добавить текущий номер в уникальный
contract_no receipt_no
- Если
receipt_no
имеет значение, то верните текущий номер - Если
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