두 개의 숫자가 주어 n
지고 m
일련의 양식을 생성하고 싶습니다.
1, 2, ..., (n-1), n, n, (n-1), ... 2, 1
반복합니다 m
.
예를 들어 for 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에서 두 가지 방법 중 하나를 사용 하여이 결과를 얻는 방법을 알고 있습니다.
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에서 어떻게 동등한 작업을 수행 할 수 있습니까?