Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

lấy danh sách các số ở giữa hai cột

nếu bạn muốn các giá trị được phân tách bằng dấu phẩy, bạn có thể làm như vậy (hoặc nếu trên 11gr2, hãy sử dụng 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. Hàng đến cột trong ORACLE

  2. Cách tiếp tục vòng lặp while sau khi ngoại lệ được nêu ra trong SQL

  3. Có sự khác biệt giữa khóa thay thế, khóa tổng hợp và khóa nhân tạo không?

  4. làm thế nào để chuyển đổi ngày thành số tháng?

  5. Một kết nối với Oracle