2011-03-28 13 views
9

एसक्यूएल में अनुक्रमिक रूप से एक पंक्ति संख्या कुंजी समूह द्वारा जोड़ने का कोई तरीका है?एसक्यूएल में कुंजी समूह द्वारा क्रमशः संख्या पंक्तियां?

मनमाने ढंग से (कोड, NAME) tuples के साथ एक तालिका मानें। उदाहरण तालिका:

CODE NAME  
---- ---- 
A Apple 
A Angel 
A Arizona 
B Bravo 
C Charlie 
C Cat 
D Dog 
D Doppler 
D Data 
D Down 

वांछित प्रक्षेपण समूहीकरण विशेषता के रूप में कोड का उपयोग:

CODE C_NO NAME  
---- ---- ---- 
A 0 Apple 
A 1 Angel 
A 2 Arizona 
B 0 Bravo 
C 1 Charlie 
C 0 Cat 
D 0 Dog 
D 1 Data 
D 2 Down 
D 3 Doppler 

धन्यवाद,

उत्तर

25

MySQL AFAIK नहीं है। यह सबसे ठिकानों .. को शामिल किया गया

SELECT 
    CODE, 
    ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO, 
    NAME 
FROM 
    MyTable 
+0

यह सोच रहा था कि यह अज्ञेयवादी हो सकता है, लेकिन यह ओरेकल पर है। – Xailor

3

MySQL (और शायद सबसे अन्य डेटाबेस):

select g.CODE 
    , count(*)-1 as C_NO 
    , g.NAME 
from MyTable as g 
    left join MyTable as o 
    on g.CODE = o.CODE 
     and g.NAME >= o.NAME 
group by g.CODE 
     , g.NAME; 

विशिष्ट MySQL करने के लिए: फिर

DELIMITER $$ 
CREATE PROCEDURE NumberRowsByGroup() 
BEGIN 
    SET @code := 0; 
    SET @num := 0; 
    SELECT CODE, C_NO, NAME FROM 
    (select q.CODE 
      , q.NAME 
      , @num := IF(q.CODE = @code, @num + 1, 0) as C_NO 
      , @code := q.CODE as previous 
     from yourTable q 
     order by CODE 
      , NAME 
    ) as p 
    ; 
END$$ 
DELIMITER ; 

, हम कॉल कर सकते हैं:

CALL NumberRowsByGroup(); 

xaprb.com/blog पोस्ट के अनुसार: how-to-number-rows-in-mysql, दूसरा तेज़ है।

+0

अन्य आरडीबीएमएस पर पहले समाधान की आवश्यकता नहीं है जिसमें विंडोिंग फ़ंक्शन हैं – gbn