Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на множество редове от един ред

опитайте това:

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

коментари

  • не назовавайте колоните си със запазените думи:"начало" и "край", ще ми благодарите някой ден.
  • ако планирате да изпълнявате това в производствена среда много пъти, създайте таблица с числа
    и вместо това използвайте тази заявка:

трябва да има таблица с числа, преди това да работи (вижте връзката по-горе)

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

ще работи по-добре.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Синтаксис за заявка с параметри в Python (pyodbc)

  2. Изравняване на пресичащи се времеви интервали

  3. Как да изберете редове за конкретна дата, игнорирайки часа в SQL Server

  4. Как да получите NextDayofWeek, ако преминете датата?

  5. Изпълнение на задание на SQL Server Agent от съхранена процедура и връщане на резултат от заданието