चुनिंदा क्वेरी में ऑटो इंक्रीमेंट फ़ील्ड कैसे जनरेट करें


84

उदाहरण के लिए मेरे पास 2 स्तंभों के साथ first_nameऔर last_nameइन मूल्यों के साथ एक तालिका है

Ali           Khani
Elizabette    Amini
Britney       Spears
,...

मैं एक selectक्वेरी लिखना चाहता हूं जो इस तरह से एक तालिका उत्पन्न करे:

1     Ali           Khani
2     Elizabette    Amini
3     Britney       Spears
,...

आपकी सहायता के लिए धन्यवाद।


1
आप RDBMS क्या उपयोग कर रहे हैं?
— पेटीएम

जवाबों:


147

यदि यह MySql है तो आप कोशिश कर सकते हैं

SELECT @n := @n + 1 n,
       first_name, 
       last_name
  FROM table1, (SELECT @n := 0) m
 ORDER BY first_name, last_name

SQLFiddle

और SQLServer के लिए

SELECT row_number() OVER (ORDER BY first_name, last_name) n,
       first_name, 
       last_name 
  FROM table1 

SQLFiddle


1
क्या होगा अगर मैं table1इसके बजाय सभी कॉलमों को अलग करना चाहता हूं first_nameऔर last_nameमैं सभी को कैसे संदर्भित कर सकता हूं? कोशिश करने से SELECT @n := @n + 1 n, *काम नहीं
— चलता

उत्तर हैSELECT @n := @n + 1 n, table1.*
— प्लेन ओल्डप्रोग्रामर

1
MYSQL में आपको 17n पर @ SET @n = 0;
— आर

2
@FranciscoR कृपया नज़दीक से देखें, यह पहले से ही सबक्वेरी में इनिशियलाइज़ हो चुका है (SELECT @n := 0)। इस दृष्टिकोण की छिपी सुंदरता यह है कि आपके पास दो के बजाय एक एकल कथन है जो कि अच्छा है जब आपके ग्राहक कोड में कई कथन निषिद्ध हैं।
— पेट्रम

33

यहाँ SQL server, Oracle, PostgreSQLजिसके लिए विंडो फ़ंक्शंस का समर्थन है।

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName

4

मामले में आपके पास कोई प्राकृतिक विभाजन मूल्य नहीं है और बस एक क्रमबद्ध संख्या चाहते हैं विभाजन की परवाह किए बिना आप एक निरंतर पर एक row_number कर सकते हैं, निम्नलिखित उदाहरण में मैंने अभी 'X' का उपयोग किया है। आशा है कि यह किसी की मदद करता है

select 
    ROW_NUMBER() OVER(PARTITION BY num ORDER BY col1) as aliascol1, 
    period_next_id, period_name_long
from 
(
  select distinct col1, period_name_long, 'X' as num
  from {TABLE} 
) as x

1
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp
SET @id = CarmasterID = @id + 1 
GO
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.