복붙노트

[SQL] SQL 1 100에서 번호 목록을 생성하는

SQL

SQL 1 100에서 번호 목록을 생성하는

DUAL (듀얼) 테이블을 사용하여, 어떻게 1에서 100 번호 목록을받을 수 있나요?

해결법

  1. ==============================

    1.귀하의 질문은 이해하기 어려운,하지만 당신은 1 100에서 번호를 선택하려면,이 트릭을 수행해야합니다

    귀하의 질문은 이해하기 어려운,하지만 당신은 1 100에서 번호를 선택하려면,이 트릭을 수행해야합니다

    Select Rownum r
    From dual
    Connect By Rownum <= 100
    
  2. ==============================

    2.오라클 PL / SQL에서 또 다른 흥미로운 솔루션 :

    오라클 PL / SQL에서 또 다른 흥미로운 솔루션 :

        SELECT LEVEL n
          FROM DUAL
    CONNECT BY LEVEL <= 100;
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.베드로의 대답은 너무 내 마음에 드는 것이다.

    베드로의 대답은 너무 내 마음에 드는 것이다.

    좀 더 자세한 내용을 찾고 있다면 IMO, 여기, 아주 좋은 개요가있다. 특히 흥미로운 벤치 마크를 읽는 것입니다.

  6. ==============================

    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. ==============================

    7.당신은 XMLTABLE을 사용할 수 있습니다 :

    당신은 XMLTABLE을 사용할 수 있습니다 :

    SELECT rownum
    FROM XMLTABLE('1 to 100');
    

    DB 휘티 d 혀라도

  8. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    11.

    SELECT * FROM `DUAL` WHERE id>0 AND id<101
    

    위의 쿼리는 데이터베이스의 SQL로 작성되었습니다.

  12. from https://stackoverflow.com/questions/2847226/sql-to-generate-a-list-of-numbers-from-1-to-100 by cc-by-sa and MIT license