2009-02-10 22 views
26

Mümkünse, isteğe bağlı bir tablodaki değerleri döndüren bir t-sql sorgusuna ihtiyacım var; ayrıca, değer = 1 değerine sahip bir artımlı tamsayı sütunu döndürür İlk satır, ikinci için 2, vb.MSSQL Artımlı tamsayı sütunu içeren deyimi seç ... Tablodan değil

Bu sütun aslında herhangi tabloda bulunduğu etmez ve ORDER BY tablonun sıralarını olabilir ve her zaman mükemmel şekil artan satır istedikleri için kesinlikle artan olmalı ...

Teşekkür önceden.

--edit Maalesef SQL Server 2000

cevap

46

ve yukarı

SELECT ROW_NUMBER() OVER(ORDER BY SomeColumn) AS 'rownumber',* 
    FROM YourTable 

2000 için Gördüğünüz bu

SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE 
INTO #Ranks FROM YourTable WHERE 1=0 

INSERT INTO #Ranks 
SELECT SomeColumn FROM YourTable 
ORDER BY SomeColumn 

SELECT * FROM #Ranks 
Order By Ranks 

böyle bir şey yapmak gerekir burada da Row Number

+4

Temp tablosunu düşürmeyi unutma –

-1

Bu çirkin ve kötü gerçekleştirir, ama teknik bu en az bir benzersiz alanıyla herhangi masaya çalışır VE çalışır SQL 2000.

SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField 
FROM myTable T2 
ORDER By T2.UniqueField 

Not: Bu yaklaşımı kullanmak ve eklerseniz dış SELECT tümcesi, sahip NEREDE bir sayıların olmak istiyorum da eğer iç SELECT'in onu ekledi etmek Sürekli.

+0

Bu işe yarayacak ama her satır için daha önce bahsettiğiniz gibi tüm tabloyu taramak zorundasınız, bu aynı zamanda çalışan bir sayım – SQLMenace

+0

Evet, bu büyük bir suça çözüm. Ancak, SQL2K kısıtlaması altında bu veya temp tablosu (zaten başka bir cevapta sunulan). Sanırım bu, çözümün daha az kötülük olduğu kesin senaryoya göre değişir. – JohnFx

+0

Senaryo: bir tablodan binlerce satır seçmek için: _ ( – Rodrigo

2

Örneğin, kullanıcıların yapabileceğiniz her bir ödeme için onay numarası eklemek istediğiniz, oradan özel bir sayı ve artım ile başlatabilirsiniz:

select @StartChequeNumber = 3446; 
SELECT 
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber) AS 'ChequeNumber' 
,* FROM YourTable 

her satır için doğru kontrol numarası verecektir.

İlgili konular