SQL (Oracle) Select без фактической таблицы, содержащей статические данные



Я ищу возможность запустить (Oracle) SQL без запроса фактической таблицы. Здесь я нашел подсказку с двойной таблицей. Это очень хорошо. Но я ищу короткое решение, чтобы выбрать несколько строк из "нигде". Разве это возможно? Вот самый короткий запрос, который я могу придумать, который делает то, что мне нужно:



Select 1, 'foo' FROM DUAL union 
Select 2, 'bar' FROM DUAL union
Select 3, 'more stuff' FROM DUAL


Но если я хочу иметь больше строк в моем результате, это становится довольно неудобно. Есть ли более короткий путь? Что-то вроде



Select 1, 'foo'; 2, 'bar'; 3, 'more stuff' from dual 
or
Select * from (1, 'foo') union (2, 'bar') union (3, 'more stuff')


Я знаю, что это не так. работа, но есть ли у тебя идея? Есть ли простой способ транспонировать результат запросов? Что-то вроде:



Select transposed (1, 'foo', 2, 'bar', 3, 'more stuff') from dual 


Я хочу сохранить количество "накладных расходов-символов" на самом низком уровне.

550   2  

2 ответов:

Вы можете использовать connect by level для создания большего количества записей-что-то вроде:

select level, decode(level, 1,'foo', 2,'bar', 3,'more stuff')
from dual connect by level <= 3

Если столбцов несколько-то это тоже работает -

select
  REGEXP_SUBSTR (jango,'^[^#]*') as f1,
  REGEXP_SUBSTR(REGEXP_REPLACE(jango,'^([^#]*#){1}', ''),'^[^#]*') as f2,
  REGEXP_REPLACE(jango,'^([^#]*#){2}', '') as f3
from
  (
  Select decode(level,
    1, 'foo#koo#joo',
    2, 'bar#loo#too' ,
    3, 'more stuff#doo#dingo') as jango
  from dual connect by level <= 20
  )

Вот как это работает-внутренний запрос такой же, как и выше, я добавил несколько столбцов с помощью # - нужно позаботиться о том, чтобы он не был частью семейства регулярных выражений, иначе нам нужно его избежать.

  Select decode(level,
    1, 'foo#koo#joo',
    2, 'bar#loo#too' ,
    3, 'more stuff#doo#dingo') as jango
  from dual connect by level <= 20

Дает следующее -

             Jango
-------------------
foo#koo#joo
bar#loo#too
more stuff#doo#dingo

Теперь следующий фрагмент выбирает из выходного столбца- 'jango', что угодно вплоть до #

  REGEXP_SUBSTR (jango,'^[^#]*') as f1,

  O/p --> foo

Для второго столбца мы удаляем содержимое 1-го столбца далее следует #

  REGEXP_REPLACE(jango,'^([^#]*#){1}', '')

  we get --> koo#joo
Теперь 1-й шаг-получить первое поле.

Для большего количества полей {1} можно увеличить.

Comments

    Ничего не найдено.