Я хочу дать серийный номер в моем запросе в соответствии с группой - PullRequest
0 голосов
/ 26 сентября 2019

Согласно моему следующему запросу, он печатает группу по данным, но я хочу дать последовательный номер no для каждой группы, как для первой группы 1, 2, 3, а затем снова для следующей группы 1, 2, 3.

Как я могу написать это для этого запроса?

select tour_no, version_no ,itinerary_detail_no 
from  itinerary_detail 
group by tour_no, version_no, itinerary_detail_no 
order by  count(*) desc

Ответы [ 3 ]

1 голос
/ 26 сентября 2019

Вы можете создать серийный номер для каждой строки, как показано ниже:

select
  tour_no, version_no, itinerary_detail_no,
  row_number()
    over(order by cnt desc, tour_no, version_no, itinerary_detail_no) as rn
from (
  select tour_no, version_no, itinerary_detail_no, count(*) as cnt
  from itinerary_detail 
  group by tour_no, version_no, itinerary_detail_no
) x
order by cnt desc, tour_no, version_no, itinerary_detail_no

Результат:

TOUR_NO  VERSION_NO  ITINERARY_DETAIL_NO  RN
-------  ----------  -------------------  --
1                17                    5   1
1                10                    5   2
2                10                    5   3 
3                10                    5   4 

Для справки, сценарий данных для этого теста:

create table itinerary_detail (
  tour_no number(6),
  version_no number(6),
  itinerary_detail_no number(6)
);

insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (2, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (3, 10, 5);
1009 *** Tour_No ver_No IT_No Seq_No JAA0000197 01 17037249 1 JAA0000197 01 17037250 2 JAA0000197 02 17037249 1 JAA0000197 02 17037250 2 JAA0000197 17037251 3 02 1011 * здесь группа по есть (Tour_No, ver_No), так этоПриведенные выше данные, я хочу, чтобы каждая группа начиналась с 1 и 2 и продолжалась, и для следующей группы снова то же самое
0 голосов
/ 26 сентября 2019
select tour_no, version_no ,itinerary_detail_no, row_number () over 
(partition by version_no order by itinerary_detail_no ) seq_no
from  itinerary_detail 
group by tour_no, version_no, itinerary_detail_no ;
0 голосов
/ 26 сентября 2019

Вам нужно rank()

     SELECT tour_no, version_no ,itinerary_detail_no,
   RANK() OVER ( PARTITION BY tour_no, version_no ,itinerary_detail_no,count(*) as 
     count_of_records ORDER BY count_of_records DESC ) AS "Rank"
     FROM   Employees group by  tour_no, version_no ,itinerary_detail_no;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...