当我执行以下查询时。
选择 30,60,90,120,150,180 从 表
我得到
以下的输出但是我的愿望输出就像,只想在一栏中。
sequence 30 60 90 120 150 180
这可能吗?
答案 0 :(得分:3)
使用适用于所有主要RDBMS的UNION ALL
SELECT 30 "sequence" UNION ALL
SELECT 60 UNION ALL
SELECT 90 UNION ALL
SELECT 120 UNION ALL
SELECT 150 UNION ALL
SELECT 180
或使用postgres'generate_series()
功能
SELECT *
FROM generate_series(30, 180, 30) "sequence";
输出:
| SEQUENCE | |----------| | 30 | | 60 | | 90 | | 120 | | 150 | | 180 |
以下是两个查询的 SQLFIddle 演示
答案 1 :(得分:1)
比使用UNION ALL短一点:
select *
from ( values (30), (60), (90), (120), (150), (180) ) as numbers (seq_no);
可替换地:
with numbers (seq_num) as (
values (30), (60), (90), (120), (150), (180)
)
select *
from numbers;
答案 2 :(得分:1)
正如@peterm所说,PostgreSQL的方法是使用generate_series()。
在支持递归cte的其他RDBMS中,您可以像这样使用它:
with recursive cte(sequence) as (
select 30
union all
select sequence + 30
from cte
where sequence < 180
)
select *
from cte
另外,如果您的RDMBS支持窗口函数,并且您有一些表,并且您知道此表中至少存在6行,则可以执行以下操作:)
select
row_number() over(order by id) * 30
from temp
limit 6
<强> sql fiddle demo 强>
答案 3 :(得分:1)
正如其他答案所提到的,当你想要生成的数据是这样的偶数间隔系列时,generate_series就是你的选择。如果没有,我喜欢a_horse_with_no_name的版本。另一种方式是:
select unnest('{30,60,90,120,150,180}'::int[]) as numbers