2013-02-17 7 views
6

मैं एक तालिका में पंक्तियों की संख्या कैसे दिखा सकता हूं कि जब कोई नया रिकॉर्ड जोड़ा जाता है तो पंक्ति का प्रतिनिधित्व करने वाली संख्या अधिक हो जाती है और जब कोई रिकॉर्ड हटा दिया जाता है तो संख्या तदनुसार अपडेट हो जाती है?मैं रिकॉर्ड संख्या का प्रतिनिधित्व करने वाली तालिका में प्रत्येक पंक्ति को एक संख्या कैसे निर्दिष्ट कर सकता हूं?

आईडी पूर्णांक (प्राथमिक कुंजी) नाम varchar (5)

आईडी अपने आप में वृद्धि करने के लिए सेट कर दिया जाता (का उपयोग करते हुए:
अधिक स्पष्ट रूप से, मैं इस तरह एक साधारण तालिका मान लीजिए पहचान विनिर्देश) तो यह पंक्ति (रिकॉर्ड की संख्या नहीं कर सकते हैं) के बाद से अगर मैं उदाहरण के लिए 3 रिकॉर्ड के रूप में:

आईडी नाम
1 एलेक्स
2 स्कॉट
3 सारा

और मैं एलेक्स और स्कॉट हटा कर एक नया रिकॉर्ड जोड़ने यह हो जाएगा:

3 Sara 
4 Mina 

तो बुनियादी तौर पर मैं इतना है कि ऐसा करने के लिए एसक्यूएल साइड समाधान के लिए देख रहा हूँ मैं कई जगहों पर स्रोत कोड में कुछ और नहीं बदलता हूं।

मैंने नौकरी पाने के लिए कुछ लिखने की कोशिश की लेकिन यह विफल हो गया। संदेश यह है:

SELECT  COUNT(*) AS [row number],Name 
FROM   dbo.Test 
GROUP BY ID, Name 
HAVING  (ID = ID) 

इस रूप में दिखाता है:

row number   Name 
1      Alex 
1      Scott 
1      Sara 

जबकि मैं इसे के रूप में दिखाया प्राप्त करना चाहते हैं:

row number   Name 
1      Alex 
2      Scott 
3      Sara 
+0

आपने क्या प्रयास किया और आप पंक्तियों में से कोई भी दिखाना नहीं चाहते हैं? – DevelopmentIsMyPassion

+0

मैंने सवाल अपडेट किया। मैं संख्याओं को दिखाना चाहता हूं जब मैं चुनिंदा आदेशों का उपयोग करता हूं।ताकि प्रत्येक बार जब मैं परिणाम चुनूं तो उनके पास रिकॉर्डिंग का प्रतिनिधित्व करने वाला सामान्य अनुक्रमांक संख्या है। – Breeze

+0

क्या आप बस पंक्ति संख्या कॉलम में उत्पन्न आईडी दिखा सकते हैं? समझ में नहीं आया कि गिनती का उपयोग क्या है (*) – DevelopmentIsMyPassion

उत्तर

8

तुम सिर्फ पंक्तियों के खिलाफ संख्या चाहते हैं, जबकि डेटाबेस में डेटा का चयन करके और नहीं है तो आप इस

select row_number() over(order by id) from dbo.Test 

उपयोग कर सकते हैं यह वें पंक्ति के लिए पंक्ति नंबर दे n होगा।

+0

मुझे क्यों मिलता है "एसक्यूएल निर्माण या कथन का समर्थन समर्थित नहीं है।" त्रुटि? (समझ गया, मुझे इसे डिजाइनर में नहीं चलाया जाना चाहिए :)) – Breeze

+0

हाँ आपको यह सही मिला! – Saksham

2

आप एक ऑटो वेतन वृद्धि कहा जाता है क्या चाहते हैं।

SQL-सर्वर के लिए यह तालिका परिभाषा में IDENTITY(1,1) विशेषता जोड़कर हासिल किया जाता है।

अन्य आरडीबीएमएस एक अलग वाक्यविन्यास का उपयोग करते हैं। उदाहरण के लिए फायरबर्ड जनरेटर है, जो गिनती करता है। एक पहले से ट्रिगर में आप जनरेटर के वर्तमान मूल्य में आईडी-फ़ील्ड असाइन करेंगे (जो स्वचालित रूप से बढ़ाया जाएगा)।

+0

मुझे पता है कि और अब मैं इसका उपयोग कर रहा हूं, पहचान (1,1) की समस्या यह है कि अगर मेरे पास अभिलेख रिकॉर्ड है और उनको हटाएं (मान लीजिए आईडी नंबर 1) और फिर से शुरू करें उस नंबर 1 को फिर से आईडी के रूप में प्राप्त न करें जब भी कोई रिकॉर्ड न हो! अगर मेरे पास 3 रिकॉर्ड हैं (1 2 3, और नंबर दो हटाएं, तो वे (1 3) के रूप में उन्हें 'शो' के रूप में प्राप्त करना चाहते हैं (1 2) – Breeze

+0

आप इसे क्यों चाहेंगे? ठीक है, मान लीजिए कि आप इसे चाहते हैं , फिर एक ट्रिगर का उपयोग करें। और एक दूसरी तालिका जिसमें हटाए गए आईडी हैं। – alzaimar

+0

मैं यह कैसे कर सकता हूं? इस रूप में यह और भी उचित है कि इस परिदृश्य में row_number() का उपयोग करना? – Breeze

0

मैंने कुछ समय पहले इस सटीक समस्या थी की कोशिश करो, लेकिन मैं एसक्यूएल सर्वर 2000 का उपयोग कर रहा था, इसलिए हालांकि पंक्ति संख्या() सबसे अच्छा समाधान, एसक्यूएल सर्वर 2000 में है, यह उपलब्ध नहीं है । इसके लिए एक वर्कअराउंड एक अस्थायी तालिका बनाना है, ऑटो वृद्धि के साथ सभी मान डालें, और वर्तमान तालिका को टी-एसक्यूएल में नई तालिका के साथ प्रतिस्थापित करें।

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