Oracle
 sql >> Baza danych >  >> RDS >> Oracle

pobierz listę liczb pomiędzy dwiema kolumnami

jeśli chcesz, aby wartości były oddzielone przecinkami, możesz to zrobić w ten sposób (lub jeśli na 11gr2 użyj listAgg )

WITH NUMS AS(
     SELECT 10 STARTNR  , 15 ENDNR  FROM DUAL UNION
    SELECT 18 STARTNR  , 22 ENDNR  FROM DUAL UNION
    SELECT 34 STARTNR  , 50 ENDNR  FROM DUAL )       , 
 NUMSBETWEEN AS(
     SELECT distinct (level + startnr)-1 seq , startnr, endnr
       FROM NUMS
      CONNECT BY (LEVEL +STARTNR ) <= ENDNR+1
      )
SELECT startnr,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(seq,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS seq
FROM   (SELECT startnr,
               seq,
               ROW_NUMBER() OVER (PARTITION BY startnr ORDER BY seq) AS curr,
               ROW_NUMBER() OVER (PARTITION BY startnr ORDER BY seq) -1 AS prev
        FROM   numsBetween)
GROUP BY startnr
CONNECT BY prev = PRIOR curr AND startnr = PRIOR startnr
START WITH CURR = 1;

STARTNR SEQ

10 10,11,12,13,14,15
18 18,19,20,21,22
34 34,35,36,37,38,39,40,41,42,43 ,44,45,46,47,48,49,50



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Brakujące wiersze podczas odpytywania tabeli za pomocą Doctrine (Symfony2)

  2. Oracle SQL — Jak mogę wywołać funkcję potokową ODCI za pomocą JSP?

  3. Błąd instalacji klienta Oracle — zbyt długa ścieżka

  4. Łączenie wierszy Oracle SQL według okresów

  5. PROCEDURA ORACLE — AUTHID dozwolone tylko na poziomie schematu