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

Trả lại nhiều hàng từ một hàng

hãy thử cái này:

create table #smalltable (id int, [begin] int, [end] int)
insert into #smalltable values (123,1,4)
insert into #smalltable values (124,1,12)
insert into #smalltable values (125,1,7)

;WITH digits (d) AS (
    SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION
    SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION
    SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION
    SELECT 0)
SELECT
    s.id, s.[begin], n.Number AS [End]
    FROM (SELECT i.d + ii.d * 10 + iii.d * 100 + iv.d * 1000 +
              v.d * 10000 + vi.d * 100000 AS Number
              FROM digits            i
                  CROSS JOIN digits  ii
                  CROSS JOIN digits  iii
                  CROSS JOIN digits  iv
                  CROSS JOIN digits  v
                  CROSS JOIN digits  vi
         ) AS N
        INNER JOIN #smalltable                                    s  ON 1=1
        INNER JOIN (SELECT MAX([end]) AS MaxEnd FROM #smalltable) dt ON 1=1
   WHERE n.Number > 0 AND n.Number<=dt.MaxEnd
    AND n.Number<=s.[end]
   ORDER BY s.id,n.Number

nhận xét

  • không đặt tên cho các cột của bạn bằng các từ dành riêng:"bắt đầu" và "kết thúc", bạn sẽ cảm ơn tôi vào một ngày nào đó.
  • nếu bạn định chạy quá trình sản xuất nhiều lần, hãy tạo một bảng số
    và sử dụng truy vấn này thay thế:

phải có một bảng Số trước khi điều này hoạt động (xem liên kết ở trên)

SELECT
    s.id,s.[begin],n.Number AS [End]
    FROM Numbers                n
        INNER JOIN #smalltable  s ON 1=1
   WHERE  n.Number > 0 AND n.Number<=s.[end]
   ORDER BY s.id,number

nó sẽ chạy tốt hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nhận được truy vấn nhóm SQL biểu mẫu hàng đầu tiên?

  2. Bảng sổ cái cơ sở dữ liệu SQL Server Azure / 2022 từ Linux.

  3. Ý nghĩa của SELECT ... FOR XML PATH (''), 1,1) là gì?

  4. Kích hoạt trong SQL Server - Nhận loại Giao dịch được thực hiện cho Bảng kiểm tra

  5. sp_MSforeachdb:chỉ bao gồm kết quả từ cơ sở dữ liệu với kết quả