Как создать определенную таблицу на лету в операторе with? - PullRequest
0 голосов
/ 03 ноября 2018

В запросе я хочу упорядочить по столбцу, который имеет такие значения, как «Foo», «Bar», «Baz». Как-то я должен определить порядок. Я создал маленькую временную таблицу примерно так:

n     i
'Foo' 1
'Bar' 2
'Baz' 3

Я соединяю таблицы в моем исходном запросе с этим в столбце 'n', а затем упорядочиваю по столбцу 'i'.

Это работает. Но можно ли вместо создания временной таблицы сгенерировать эту таблицу на лету в операторе with, например, а затем использовать ее? Я знаю generate_series, но могу ли я это использовать? Или есть другой способ?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы можете использовать предложение VALUES:

with temp (n,i) as (
  values 
    ('Foo',1)
    ('Bar',2) 
    ('Baz',3)
)
select *
from temp
order by i;

Для этого вам на самом деле не нужен CTE, вы также можете поместить предложение VALUES в FROM:

select *
from (
  values 
    ('Foo',1)
    ('Bar',2) 
    ('Baz',3)
) as temp(n,i);
0 голосов
/ 04 ноября 2018

Если вы хотите назначить заказ, вы можете легко использовать оператор WITH, например:

WITH mytable AS (
    SELECT 'Foo' AS n, 1 AS i
    UNION SELECT 'Bar', 2
    UNION SELECT 'Baz', 3
)
SELECT *
FROM mytable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...