2011-03-14 21 views
9

Örneğin başlangıç ​​ve bitiş numaralarına sahip satırları olan bir tablom var.Sayılar Aralığı ile Sıcaklık Tablosu Oluşturun

key  startID  endID 
1   500  505 
2   784  788 
3   802  804 

ve böylece ..

bir geçici bir tablo oluşturmak istiyoruz

(veya tablo değişkeni/CTE vs.), bu numaralar ve aralarında kapak aralığı her biri için bir sıra vardır - örneğin,

ID 
500 
501 
502 
503 
504 
505 
784 
785 
786 
787 
788 
802 
803 
804 

kimse bunu başarmak için hızlı ve kolay bir şekilde yönde işaret edebilir: Ben şu satırdan oluşan bir tablo görmek istiyorum yukarıdaki örnek vermiş olduğu? Bir şekilde bir sayı tablosu kullanmayı düşünmüştüm ama baktığım masalar 200m. Satırlar var ve o kadar büyük bir sayı masam yok!

Herhangi bir yardım çok takdir edilmektedir. Şimdiden teşekkürler.

cevap

12
WITH q AS 
     (
     SELECT startId, endId 
     FROM ranges 
     UNION ALL 
     SELECT startId + 1, endId 
     FROM q 
     WHERE startId < endId 
     ) 
SELECT startId 
FROM q 
OPTION (MAXRECURSION 0) 
+0

İnanılmaz! Teşekkürler! – LNote

+0

@LNote: hoşgeldiniz. Lütfen istediğin buysa, kabul edilen cevabı kontrol edin. – Quassnoi

+0

Evet - Ben yaptım ama çok hızlıydın ve izin vermeden önce 3 dakika beklemek zorunda kaldım! Tekrar teşekkürler. – LNote

4

MSSQL'de, herhangi bir keyfi büyük tablodan birini de kullanabilirsiniz, syscolumns örnek olabilir. Yeterli satır yoksa - çapraz birleştirme yapabilirsiniz:

SELECT  TOP 10000 
ROW_NUMBER() OVER (ORDER BY c1.id) 
FROM   syscolumns AS c1 
CROSS JOIN syscolumns AS c2