2009-02-10 22 views
26

मुझे, यदि संभव हो, तो एक टी-एसक्यूएल क्वेरी है कि, मनमानी तालिका से मूल्यों को वापस करने के लिए, मूल्य = 1 के साथ एक incremental पूर्णांक कॉलम भी देता है पहली पंक्ति, दूसरे के लिए 2, और इसी तरह।एमएसएसक्यूएल वृद्धिशील पूर्णांक कॉलम के साथ कथन का चयन करें ... तालिका से नहीं

यह कॉलम वास्तव में किसी भी तालिका में रहता नहीं है, और क्योंकि ORDER BY खंड तालिका की पंक्तियां सॉर्ट सकता है और मैं हमेशा सही आकार में वृद्धिशील पंक्ति चाहते हैं, सख्ती से वृद्धिशील होना चाहिए ...

धन्यवाद अग्रिम रूप से।

--EDIT क्षमा करें, का उल्लेख करने के लिए एसक्यूएल सर्वर पर 2000

उत्तर

46

एसक्यूएल 2005 के लिए और ऊपर

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

2000 के लिए आप इस

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 

की तरह कुछ करने की ज़रूरत को देखने भी यहां Row Number

+4

पर चलना चाहिए temp तालिका –

2

कोशिश ROW_NUMBER() चलाना चाहिए भूल गया

http://msdn.microsoft.com/en-us/library/ms186734.aspx

उदाहरण:

SELECT 
    col1, 
    col2, 
    ROW_NUMBER() OVER (ORDER BY col1) AS rownum 
FROM tbl 
+0

क्षमा करें, मैं उल्लेख करना भूल गया, एसक्यूएल 2000 – Rodrigo

-1

यह बदसूरत है और बुरी तरह से करता है, लेकिन तकनीकी रूप से यह कम से कम एक अद्वितीय क्षेत्र के साथ किसी भी मेज पर काम करता है और में काम करता है एसक्यूएल 2000.

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

नोट: यदि आप इस दृष्टिकोण का उपयोग और जोड़ देते हैं तो जहां बाहरी चयन करने के लिए खंड, आपके पास एक भीतरी चयन करने के लिए यह जोड़ा भी अगर आप संख्या होना चाहता हूँ निरंतर।

+0

ड्रॉप करना न भूलें, लेकिन यह काम करेगा, लेकिन जैसा कि आप पहले से ही प्रत्येक पंक्ति के लिए उल्लिखित हैं, उसे पूरी तालिका को स्कैन करना है, इसे भी जाना जाता है एक चलती गिनती – SQLMenace

+0

हाँ, यह एक बड़ा चूसने वाला समाधान है। हालांकि, SQL2K की बाधा के तहत यह या तो यह या अस्थायी तालिका है (पहले से ही किसी अन्य उत्तर में दी गई है)। मुझे लगता है कि यह सटीक परिदृश्य पर निर्भर करता है जो समाधान कम बुराई है। – JohnFx

+0

परिदृश्य है: तालिका से कई हजार पंक्तियों का चयन करने के लिए: _ ( – Rodrigo

2

तुम वहाँ से एक कस्टम संख्या और वेतन वृद्धि के साथ शुरू कर सकते हैं, उदाहरण के लिए आप प्रत्येक भुगतान आप कर सकते हैं के लिए चेक संख्या जोड़ना चाहते हैं:

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

प्रत्येक पंक्ति के लिए सही चेक संख्या दे देंगे।