#sql #oracle
#sql #Oracle
Вопрос:
У меня есть приведенный ниже набор данных, полученный после группировки по подразделениям и loc.
идентификатор отдела loc count
100 a 2
300 c 1
Мне нужно вывести, как показано ниже
deptid loc
100 a
100 a
300 c
пожалуйста, помогите
Комментарии:
1. К тому времени не используйте group . Или поделитесь своим запросом.
Ответ №1:
Другой вариант — использовать Recursive Queries
для получения желаемого результата.
with cte(deptid, loc, cnt) as
(select deptid, loc, cnt - 1 from dept
union all
select cte.deptid, cte.loc, cte.cnt - 1
from cte, dept
where dept.deptid = cte.deptid and dept.loc = cte.loc
and cte.cnt > 0)
select deptid, loc from cte order by deptid, loc;
Ссылка на скрипку DB: https: //dbfiddle.uk/?rdbms=oracle_18amp;fiddle=0580680ecf0b47b4933e3a4731b62b4a
Ответ №2:
Вам необходимо сгенерировать строки (rws встроенного просмотра) в соответствии с максимальным значением для столбца count, а затем присоединить их к вашей базовой таблице, как показано ниже :
select t.DEPT_ID, t.LOC
from your_table t
join (
select level lvl from dual
connect by level <= (select max(count) from your_table )
)rws
on rws.lvl <= t.count
order by 1, 2
;