Я использую приведенный ниже код оракула, чтобы найти 5 лучших магазинов, в которых продается больше всего товаров. Все, что находится после этих 5 хранилищ, должно быть сгруппировано в «другой» ранг 6 ранга. Run_id и scene_ID имеют отношение один к одному. Этот код работает, когда есть только один run_id и один script_id. Этот код прекрасно работает, когда у меня есть только один run_id и один script_id. Тем не менее, для эффективности я хотел бы получить 5 лучших рангов для каждого сценария только с запросом. Когда я сделаю это, первый run_id покажет мне 5 лучших цепочек и все остальные сегменты, а каждый run_id после этого покажет только все остальные сегменты с рангом 6.
SELECT c.SCENARIO_ID, case when C.YEAR_MONTH_NBR >= to_char(r.proj_start_dt,'YYYYMM') then 'G' else 'L' End as overUnd, case when rnk <= 5 then c.model_nme else 'Other' end as Chain_Nme, sum(c.item_qty), case when rnk <= 5 then rnk else 6 end as final_rank
from USR.pdr_summary c
Left Outer Join run_tbl r on c.run_id = r.run_id
Left join (SELECT c.scenario_id, c.model_nme, rank () over (order by c.scenario_id, sum(C.item_qty) desc) as Rnk
from USR.pdr_summary c
where c.run_id IN ('1110','1111','1112','1113')
and c.scenario_id IN('5423','5424','5425','5426')
and c.model_nme <> 'Other Retail'
group by c.scenario_id, c.model_nme) rank_data
on rank_data.model_nme = c.model_nme
and rank_data.scenario_id = c.scenario_id
where c.run_id IN ('1110','1111','1112','1113')
and c.scenario_id IN('5423','5424','5425','5426')
group by c.SCENARIO_ID, case when C.YEAR_MONTH_NBR >= to_char(r.proj_start_dt,'YYYYMM') then 'G' else 'L' End, case when rnk <= 5 then c.model_nme else 'Other' end, case when rnk <= 5 then rnk else 6 end
order by c.SCENARIO_ID, overUnd, case when rnk <= 5 then rnk else 6 end asc
Когда я удаляю строку and rank_data.scenario_id = c.scenario_id
из запроса данных ранга, то для некоторых сценариев я получаю все 6 рангов, а в других я получаю ранг 1, 3, 5 и 6 или 1,2,4 и 6.
Я думаю, что это проблема с тем, как я делаю соединения, но я не могу понять, почему?
Мои желаемые результаты ниже:
Scenario_id OverUnd Chain_nme item_qty rank
5423 G Walmart 1000 1
5423 G Amazon 950 2
5423 G Target 750 3
5423 G Walgreens 600 4
5423 G CVS 500 5
5423 G Other 800 6
5423 L Trader Joe 1000 1
5423 L Amazon 950 2
5423 L Target 750 3
5423 L Walgreens 600 4
5423 L Walmart 500 5
5423 L Other 800 6
5424 G Walgreens 1000 1
5424 G Amazon 950 2
5424 G Target 750 3
5424 G Walmart 600 4
5424 G CVS 500 5
5424 G Other 800 6
5424 L Trader Joe 1000 1
5424 L Amazon 950 2
5424 L Target 750 3
5424 L Walgreens 600 4
5424 L Walmart 500 5
5424 L Other 800 6
Что я получаю:
Scenario_id OverUnd Chain_nme item_qty rank
5423 G Walmart 1000 1
5423 G Amazon 950 2
5423 G Target 750 3
5423 G Walgreens 600 4
5423 G CVS 500 5
5423 G Other 800 6
5423 L Trader Joe 1000 1
5423 L Amazon 950 2
5423 L Target 750 3
5423 L Walgreens 600 4
5423 L Walmart 500 5
5423 L Other 800 6
5424 G Other 700 6
5424 L Other 900 6
5425 G Other 700 6
5425 L Other 900 6
5426 G Other 700 6
5426 L Other 900 6
Извините, я не уверен, как сделать так, чтобы это выглядело как таблица, когда я копирую / вставляю данные.