#sql #oracle
#sql #Oracle
Вопрос:
Используя oracle SQL, я хочу сгенерировать строковый список чисел, рассчитанных до значения количества.
Select [Item], [Quantity], <Something here> as [Quantity List]
from table
чтобы вернуть
[Item],[Quantity], [Quantity List]
'Socks', 2 , '1 2'
'Shoes', 3 , '1 2 3'
'Coats', 6 , '1 2 3 4 5 6'
'Hats' , 3 , '1 2 3' etc...
Я не пытаюсь создать справочную таблицу, необходимо оценить каждое количество и ввести соответствующую строку по мере ее выполнения
Заранее спасибо
Комментарии:
1. oracle или microsoft sql?
2. @Jim . , , В вашем вопросе указан Oracle, но вы используете квадратные скобки, что сбивает с толку. Обычно они связаны с SQL Server (хотя Sybase и SQLite также поддерживают их).
3. извините, да, я специалист по tsql по профессии, в силу привычки это, безусловно, oracle
Ответ №1:
Я бы предложил сначала сгенерировать все числа, а затем присоединиться к ним. Вы можете сгенерировать список с помощью рекурсивного CTE:
with cte(n, max_qty, list) as (
select 1, max_qty, '1' as list
from (select max(quantity) as max_qty from t) x
union all
select n 1, max_qty, list || ' ' || (n 1)
from cte
where n < max_qty
)
select t.*, cte.list
from t join
cte
on t.quantity = cte.n;
Вот скрипка db<> .
Примечание: Если вы действительно используете SQL Server, вы можете использовать очень похожую логику в этой базе данных.
Комментарии:
1. Спасибо, Гордон, это здорово
Ответ №2:
Вы можете использовать hiearchical query
в подзапросе select clause
следующим образом:
select item, quantity,
(select listagg(level, ' ') within group(order by level)
from dual connect by level <= quantity) as quantity_list
from t
Db<>Fiddle для того же.