2015-11-16 2 views
0

У меня есть представление, которое показывает список gsmnumbers, который используется для расчета определенных тарифов. Эти цифры взяты из таблицы чисел, и это простой и простой вид. Тем не менее, мне нужно добавить к нему больше чисел на основе конкретных данных, и это становится затруднительным.Oracle SQL: объединение между значениями в представлении

У меня есть таблица, которая не является списком gsmnumbers, но содержит несколько диапазонов. Мне нужно получить все числа в пределах этих диапазонов, добавленных в представление gsmnumber.

Если мы посмотрим на таблицу, содержащую диапазоны, у них есть идентификатор, код продукта, начальное значение и конечное значение (также необходимо включить начальное значение и значение endvalue). Мне нужно иметь список всех значений числа, которые находятся между начальными значениями и значениями конца для каждой строки, где код продукта равен 37.

Тот факт, что у меня разные диапазоны, затрудняет мне поиск ответа на этот вопрос, так как большинство поисковых запросов просто отвечают, как получить значения одного диапазона.

+0

Вам нужно что-то вроде слева присоединитесь к составному условию, например '... from gsmtable g left join rangetable r on (g.gsmnumber> = r.beginvalue AND g.gsmnumber <= r.endvalue) ... где r.productCode = 37'. Если числа имеют числовой тип данных, '... from gsmtable g left join rangetable r on (g.gsmnumber между r.beginvalue AND r.endvalue) ... где r.productCode = 37' – collapsar

+0

Возможно, если вы обновили ваш вопрос, чтобы включить образец ввода и ожидаемые выходные данные, мы сможем вам помочь? См. [Этот вопрос] (пример того, как были предоставлены примеры данных) - это минимальный размер, который должен быть предоставлен, - следует приветствовать создание операторов таблиц и вставки, или если вы можете настроить запрос с помощью предложения WITH для генерации образцы данных, что было бы еще лучше. Или предоставите [SQLFiddle] (http://sqlfiddle.com) с содержащимися там скриптами. – Boneist

ответ

0

Вы могли бы построить простой иерархический запрос возвращающегося номер (1,2,3,4 ...) и объединить его с таблицей:

SQLFiddle demo

with 
    tmp1 as (select max(endvalue-beginvalue+1) mv from gsm where product=37), 
    tmp2 as (select level lvl from tmp1 connect by level<=mv) 
select id, beginvalue+lvl-1 nr, beginvalue, endvalue 
    from gsm join tmp2 on beginvalue+lvl-1<=endvalue 
    where product = 37 order by id, beginvalue+lvl-1 
Смежные вопросы