在查询中,我想按具有“ Foo”,“ Bar”,“ Baz”之类的值的列进行排序。我必须以某种方式定义一个订单。我所做的就是创建一个像这样的小型临时表:
n i
'Foo' 1
'Bar' 2
'Baz' 3
我将原始查询中的表与“ n”列中的表连接起来,然后按“ i”列进行排序。
这有效。但是,我可以创建一个临时表然后使用它来代替创建临时表吗?我知道generate_series,但是我可以使用吗?还是有另一种方法?
答案 0 :(得分:1)
如果要开单,可以轻松使用WITH
语句,如下所示:
WITH mytable AS (
SELECT 'Foo' AS n, 1 AS i
UNION SELECT 'Bar', 2
UNION SELECT 'Baz', 3
)
SELECT *
FROM mytable
答案 1 :(得分:1)
您可以使用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);