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


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.