Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwracanie wielu wierszy z jednego wiersza

spróbuj tego:

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

komentarze

  • nie nazywaj swoich kolumn słowami zastrzeżonymi:„początek” i „koniec”, pewnego dnia mi podziękujesz.
  • jeśli planujesz wielokrotnie uruchamiać to w środowisku produkcyjnym, utwórz tabela liczb
    i zamiast tego użyj tego zapytania:

musisz mieć tabelę Numbers, zanim to zadziała (patrz link powyżej)

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

będzie działać lepiej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Zapytanie o adres IP serwera

  2. Włóż do z unią

  3. Dziwna definicja widoku SQL Server

  4. Wydajność SQL DELETE

  5. Raport lokalny a raport serwera w kontrolce przeglądarki ASP .Net Report