2013-03-04 27 views
19

के लिए प्रारंभिक मान निर्दिष्ट करें मैं के बजाय की 3258170 की शुरुआत को परिभाषित करना चाहता हूं।मैन्युअल रूप से Row_Number()

मैं निम्नलिखित SQL क्वेरी

SELECT ROW_NUMBER() over(order by (select 3258170)) as 'idd'. 

हालांकि उपयोग कर रहा हूँ, इसके बाद के संस्करण क्वेरी काम नहीं कर रहा। जब मैं काम नहीं कहता हूं तो मेरा मतलब यह निष्पादन है लेकिन यह 3258170 से शुरू नहीं होता है। क्या कोई मेरी मदद कर सकता है?

कारण मैं पंक्ति संख्या निर्दिष्ट करना चाहता हूं कि मैं पंक्तियों को एक तालिका से दूसरे में सम्मिलित कर रहा हूं। पहली तालिका में अंतिम रिकॉर्ड की पंक्ति संख्या 3258169 है और जब मैं नए रिकॉर्ड डालता हूं, तो मैं चाहता हूं कि उन्हें 3258170 से पंक्ति संख्या प्राप्त हो।

+0

0_0 मुझे यकीन नहीं है कि ऐसी चीज संभव है, लेकिन मैं ** ** ** सुनिश्चित हूं कि यह एक भयानक विचार है। आप वास्तव में क्या करने की कोशिश कर रहे हैं? एसक्यूएल सर्वर में पूर्णांक वृद्धि पूर्णांक कॉलम है, है ना? –

+1

क्या आप सही आईडी रखने के लिए स्वत: वृद्धिशील प्राथमिक कुंजी नहीं जोड़ सकते हैं? –

+0

हाँ, मैं यह कर सकता हूं। बस यह देखने की कोशिश कर रहा है कि कोई और तरीका है या नहीं। – Huzaifa

उत्तर

36

बस row_number() का परिणाम को जोड़ने के मूल्य:

select 3258170 - 1 + row_number() over (order by (select NULL)) as idd 

row_number() की order by खंड को निर्दिष्ट किया जाता है क्या कॉलम के आधार पर आदेश के लिए प्रयोग किया जाता है। वहां स्थिरता निर्दिष्ट करके, आप बस कह रहे हैं "उद्देश्यों के क्रम में सब कुछ एक ही मूल्य है"। इसमें कुछ भी नहीं है, चुने गए पहले मूल्य के साथ कुछ भी नहीं है।

भ्रम से बचने के लिए, मैंने स्थिर मूल्य को न्यूल के साथ बदल दिया। SQL सर्वर में, मेरे पास देखा गया है यह वास्तव में पंक्तियों को सॉर्ट किए बिना अनुक्रमिक संख्या निर्दिष्ट करता है - एक देखा गया प्रदर्शन लाभ, लेकिन ऐसा नहीं जिसे मैंने दस्तावेज देखा है, इसलिए हम उस पर निर्भर नहीं हो सकते हैं।

+0

क्या गलत है अगर मैं चयन में मूल्य निर्दिष्ट करता हूं? – Huzaifa

+0

@ जॉन - आपको यह समझने की आवश्यकता है कि ROW_NUMBER() क्या है और आप इसे मान निर्दिष्ट नहीं कर सकते हैं। आप केवल इसमें जोड़ सकते हैं। ओरेकल प्रलेखन से: "ROW_NUMBER एक विश्लेषणात्मक फ़ंक्शन है। यह प्रत्येक पंक्ति के लिए एक अनन्य संख्या निर्दिष्ट करता है जिसे इसे लागू किया जाता है (या तो विभाजन में प्रत्येक पंक्ति या क्वेरी द्वारा लौटाई गई प्रत्येक पंक्ति), order_by_clause में निर्दिष्ट पंक्तियों के क्रमबद्ध अनुक्रम में , 1 से शुरू होता है। " – Art

+0

MySQL के लिए ओएमजी टट्टू देखें: http://stackoverflow.com/questions/1895110/row-number-in-mysql –

3

मुझे लगता है यह आसान

ROW_NUMBER() OVER(ORDER BY Field) - 1 AS FieldAlias (To start from 0) 
ROW_NUMBER() OVER(ORDER BY Field) + 3258169 AS FieldAlias (To start from 3258170) 
0

कभी कभी है ....

ROW_NUMBER() सबसे अच्छा समाधान है, खासकर जब वहाँ अंतर्निहित डेटा सेट में डुप्लिकेट रिकॉर्ड हो सकता है नहीं हो सकता है (शामिल हों के लिए प्रश्न आदि)। इसके परिणामस्वरूप अपेक्षा से अधिक पंक्तियां लौटा दी जा सकती हैं। आप एक SEQUENCE बनाने पर विचार कर सकते हैं जो कुछ मामलों में क्लीनर समाधान माना जा सकता है। यानी .:

CREATE SEQUENCE myRowNumberId 
    START WITH 1 
    INCREMENT BY 1 
GO 

SELECT NEXT VALUE FOR myRowNumberId AS 'idd' -- your query 
GO 

DROP SEQUENCE myRowNumberId; -- just to clean-up after ourselves 
GO 

नकारात्मक पक्ष दृश्यों के साथ अलग, खिड़की कार्यों आदि जटिल क्वेरी में उपयोग करने के लिए देखें पूरा अनुक्रम प्रलेखन here मुश्किल हो सकता है।

संबंधित मुद्दे