[SQL] SQL 1 100에서 번호 목록을 생성하는
SQLSQL 1 100에서 번호 목록을 생성하는
DUAL (듀얼) 테이블을 사용하여, 어떻게 1에서 100 번호 목록을받을 수 있나요?
해결법
-
==============================
1.귀하의 질문은 이해하기 어려운,하지만 당신은 1 100에서 번호를 선택하려면,이 트릭을 수행해야합니다
귀하의 질문은 이해하기 어려운,하지만 당신은 1 100에서 번호를 선택하려면,이 트릭을 수행해야합니다
Select Rownum r From dual Connect By Rownum <= 100
-
==============================
2.오라클 PL / SQL에서 또 다른 흥미로운 솔루션 :
오라클 PL / SQL에서 또 다른 흥미로운 솔루션 :
SELECT LEVEL n FROM DUAL CONNECT BY LEVEL <= 100;
-
==============================
3.그것은 어려운 방법을 수행하십시오. 멋진 MODEL 절을 사용 :
그것은 어려운 방법을 수행하십시오. 멋진 MODEL 절을 사용 :
SELECT V FROM DUAL MODEL DIMENSION BY (0 R) MEASURES (0 V) RULES ITERATE (100) ( V[ITERATION_NUMBER] = ITERATION_NUMBER + 1 ) ORDER BY 1
증명 : http://sqlfiddle.com/#!4/d41d8/20837
-
==============================
4.오라클의 서브 쿼리 공장 절을 사용하여 "함께"당신은 1 100에서 번호를 선택할 수 있습니다 :
오라클의 서브 쿼리 공장 절을 사용하여 "함께"당신은 1 100에서 번호를 선택할 수 있습니다 :
WITH t(n) AS ( SELECT 1 from dual UNION ALL SELECT n+1 FROM t WHERE n < 100 ) SELECT * FROM t;
-
==============================
5.베드로의 대답은 너무 내 마음에 드는 것이다.
베드로의 대답은 너무 내 마음에 드는 것이다.
좀 더 자세한 내용을 찾고 있다면 IMO, 여기, 아주 좋은 개요가있다. 특히 흥미로운 벤치 마크를 읽는 것입니다.
-
==============================
6.당신이 원하는 경우 정수는,이 같은 것을 사용할 수 있습니다 (즉, 1 이외의 다른 시작) 두 정수 사이에 바인딩합니다 :
당신이 원하는 경우 정수는,이 같은 것을 사용할 수 있습니다 (즉, 1 이외의 다른 시작) 두 정수 사이에 바인딩합니다 :
with bnd as (select 4 lo, 9 hi from dual) select (select lo from bnd) - 1 + level r from dual connect by level <= (select hi-lo from bnd);
그것은 제공합니다 :
4 5 6 7 8
-
==============================
7.당신은 XMLTABLE을 사용할 수 있습니다 :
당신은 XMLTABLE을 사용할 수 있습니다 :
SELECT rownum FROM XMLTABLE('1 to 100');
DB 휘티 d 혀라도
-
==============================
8.CUBE에 의해 그룹을 사용 :
CUBE에 의해 그룹을 사용 :
SELECT ROWNUM FROM (SELECT 1 AS c FROM dual GROUP BY CUBE(1,1,1,1,1,1,1) ) sub WHERE ROWNUM <=100;
れ x て s て r도
-
==============================
9.베드로의 예의 변형, 즉이 0에서 99 사이의 모든 숫자를 생성하는 데 사용할 수있는 방법을 보여줍니다.
베드로의 예의 변형, 즉이 0에서 99 사이의 모든 숫자를 생성하는 데 사용할 수있는 방법을 보여줍니다.
with digits as ( select mod(rownum,10) as num from dual connect by rownum <= 10 ) select a.num*10+b.num as num from digits a ,digits b order by num ;
일괄 식별자 할당을하고, 아직 할당되지 않은 항목을 찾고 때이 같은 뭔가 도움이된다.
당신이 빙고 티켓을 판매하는 경우 예를 들어, 100 층 직원의 할당 배치 (내가 스포츠를위한 기금 인상에 사용하는 방법을 생각) 할 수 있습니다. 그들은 배치를 판매, 그들은 순서에서 다음 일괄 부여됩니다. 그러나, 티켓을 구입하는 사람들은 배치에서 모든 티켓을 구입하도록 선택할 수 있습니다. 문제는 "티켓이 판매 된 것을",해야 할 수 있습니다.
이 경우, 우리는 주어진 배치에서 반환 된 티켓의 부분, 무작위 목록을 가지고 있고, 우리가하지 않는 결정하기 위해 모든 가능성의 전체 목록이 필요합니다.
with range as ( select mod(rownum,100) as num from dual connect by rownum <= 100 ), AllPossible as ( select a.num*100+b.num as TicketNum from batches a ,range b order by num ) select TicketNum as TicketsSold from AllPossible where AllPossible.Ticket not in (select TicketNum from TicketsReturned) ;
핵심 단어를 사용 합니다만, 나는 실제 예에서 일부 변수 이름을 변경했습니다.
이 같은 유용 할 이유 ... 보여주기 위해
-
==============================
10.나는 숫자의 테이블을 반환하는 오라클 함수를 생성
나는 숫자의 테이블을 반환하는 오라클 함수를 생성
CREATE OR REPLACE FUNCTION [schema].FN_TABLE_NUMBERS( NUMINI INTEGER, NUMFIN INTEGER, EXPONENCIAL INTEGER DEFAULT 0 ) RETURN TBL_NUMBERS IS NUMEROS TBL_NUMBERS; INDICE NUMBER; BEGIN NUMEROS := TBL_NUMBERS(); FOR I IN ( WITH TABLA AS (SELECT NUMINI, NUMFIN FROM DUAL) SELECT NUMINI NUM FROM TABLA UNION ALL SELECT (SELECT NUMINI FROM TABLA) + (LEVEL*TO_NUMBER('1E'||TO_CHAR(EXPONENCIAL))) NUM FROM DUAL CONNECT BY (LEVEL*TO_NUMBER('1E'||TO_CHAR(EXPONENCIAL))) <= (SELECT NUMFIN-NUMINI FROM TABLA) ) LOOP NUMEROS.EXTEND; INDICE := NUMEROS.COUNT; NUMEROS(INDICE):= i.NUM; END LOOP; RETURN NUMEROS; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NUMEROS; WHEN OTHERS THEN RETURN NUMEROS; END; /
새로운 데이터 유형을 만들 필요가있다 :
CREATE OR REPLACE TYPE [schema]."TBL_NUMBERS" IS TABLE OF NUMBER; /
용법:
SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10))--integers difference: 1;2;.......;10
그리고 당신은 지수 표기법으로 숫자 사이에 소수점을 필요로하는 경우 :
SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10,-1));--with 0.1 difference: 1;1.1;1.2;.......;10 SELECT COLUMN_VALUE NUM FROM TABLE([schema].FN_TABLE_NUMBERS(1,10,-2));--with 0.01 difference: 1;1.01;1.02;.......;10
-
==============================
11.
SELECT * FROM `DUAL` WHERE id>0 AND id<101
위의 쿼리는 데이터베이스의 SQL로 작성되었습니다.
from https://stackoverflow.com/questions/2847226/sql-to-generate-a-list-of-numbers-from-1-to-100 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 수 (*) 성능 (0) | 2020.04.25 |
---|---|
[SQL] 단일 쿼리에서 여러 개의 CTE (0) | 2020.04.25 |
[SQL] SQL 서버에서 변수로 저장 프로 시저의 출력을 반환하는 방법 (0) | 2020.04.25 |
[SQL] PHP의 PDO 연 마 SQL 연결을 폐쇄해야 (0) | 2020.04.25 |
[SQL] 합니까 DB2는 "삽입 또는 업데이트"문이? (0) | 2020.04.24 |