二つの数を考えるnとm、私は、フォームのシリーズを生成したいです
1, 2, ..., (n-1), n, n, (n-1), ... 2, 1そしてそれを繰り返しmます。
たとえば、n = 3およびの場合、m = 4次の24個の数字のシーケンスが必要です。
1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1
----------------  ----------------  ----------------  ----------------
PostgreSQLでこの結果を2つの方法のいずれかで達成する方法を知っています。
generate_series関数を使用する次のクエリと、順序が正しいことを保証するためのいくつかのトリックを使用します。
WITH parameters (n, m) AS
(
    VALUES (3, 5)
)
SELECT 
    xi
FROM
(
    SELECT
        i, i AS xi
    FROM
        parameters, generate_series(1, parameters.n) AS x(i)
    UNION ALL
    SELECT
        i + parameters.n, parameters.n + 1 - i AS xi
    FROM
        parameters, generate_series(1, parameters.n) AS x(i)
) AS s0 
CROSS JOIN 
    generate_series (1, (SELECT m FROM parameters)) AS x(j)
ORDER BY
    j, i ;
...または同じ目的で関数を使用し、随伴ループとネストされたループを使用します。
CREATE FUNCTION generate_up_down_series(
    _elements    /* n */ integer,
    _repetitions /* m */ integer)
RETURNS SETOF integer AS
$BODY$
declare
    j INTEGER ;
    i INTEGER ;
begin
    for j in 1 .. _repetitions loop
        for i in         1 .. _elements loop
              return next i ;
        end loop ;
        for i in reverse _elements .. 1 loop
              return next i ;
        end loop ;
    end loop ;
end ;
$BODY$
LANGUAGE plpgsql IMMUTABLE STRICT ;
標準SQLまたはTransact-SQL / SQL Serverで同等の方法を実行するにはどうすればよいですか?