2014-04-29 14 views

risposta

16

Potreste attraversare aderire ad una serie di 3:

SELECT a.n 
from generate_series(1, 100) as a(n), generate_series(1, 3) 
8

si potrebbe provare intero di divisione come questo:

SELECT generate_series(3, 100)/3 
+0

fantastico! più pratico rispetto alla risposta selezionata. – uniquegino

2

Non so se è possibile non utilizzare generate_series del genere in PostgreSQL, ma vorrei provare un cross join:

SELECT x FROM 
    (SELECT generate_series(1, 10) AS x) t1, 
    (SELECT generate_series(1, 3) as y) t2 

Edit:

Come generate_series restituisce già un tavolo non c'è alcuna necessità di SELECT nella tabella derivata:

SELECT x FROM 
    generate_series(1, 10) AS x, 
    generate_series(1, 3) as y 
+0

Funziona su 9.3 – frlan

+0

Quindi questo dovrebbe funzionare. – dnoeth

5

Per numeri così piccoli CROSS JOIN due espressioni VALUES:

SELECT n 
FROM (VALUES (1),(2),(3)) x(r) -- repetitions (values are not used) 
    ,(VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) y(n); -- numbers 

SQL Fiddle.

Questo funziona per qualsiasi sequenza numerica (compresi i modelli ripetuti o irregolari).
Per qualcosa di più grande e con un modello sequenziale regolare, utilizzare generate_series() come suggerito.

1
SELECT a.x from generate_series(0, 100) as a(x), generate_series(1, 3) 
2

Solo un altro opzioni:

select generate_series(1, 3) from generate_series(1, 10) 

select generate_series(1, 30) % 10 + 1 
Problemi correlati