2013-01-03 8 views
5

पर समूहित किया गया है, मैं तालिका से 2 कॉलम चुनना चाहता हूं, और प्रत्येक मान को एक int मान असाइन करना चाहता हूं। हालांकि, मैं चाहता हूं कि पहला कॉलम आईडी सभी मानों के लिए समान हो।SQL सर्वर में पंक्ति संख्या असाइन करना, लेकिन मान

दूसरे कॉलम के लिए, मैं चाहता हूं कि प्रत्येक मान को भी क्रमांकित किया जाए, लेकिन पहले कॉलम द्वारा विभाजित किया गया हो। मैंने यह टुकड़ा निकाला है, लेकिन मुझे काम करने वाला पहला हिस्सा नहीं मिल सकता है।

यहां परीक्षण परिदृश्य है जिसका मैं उपयोग कर रहा हूं।

DECLARE @TestTable as Table (Column1 char(1), Column2 char(1)) 

INSERT INTO @TestTable SELECT 'A','A' 
INSERT INTO @TestTable SELECT 'A','B' 
INSERT INTO @TestTable SELECT 'A','C' 
INSERT INTO @TestTable SELECT 'B','D' 
INSERT INTO @TestTable SELECT 'B','E' 
INSERT INTO @TestTable SELECT 'B','F' 
INSERT INTO @TestTable SELECT 'B','G' 
INSERT INTO @TestTable SELECT 'B','H' 
INSERT INTO @TestTable SELECT 'C','A' 
INSERT INTO @TestTable SELECT 'C','B' 
INSERT INTO @TestTable SELECT 'C','C' 


SELECT 
    Row_Number() OVER (Partition BY Column1 ORDER BY Column1) as Column1_ID, 
    Column1, 
    Row_Number() OVER (Partition BY Column1 ORDER BY Column1, Column2) as Column2_ID, 
    Column2 
FROM @TestTable 

जब मैं इस चलाने के लिए, Column2_ID में मान सही हैं, लेकिन मैं के लिए Column1_ID इस प्रकार होने के लिए मान चाहते हैं।

Column1_ID Column1 Column2_ID Column2 
1    A  1   A 
1    A  2   B 
1    A  3   C 
2    B  1   D 
2    B  2   E 
2    B  3   F 
2    B  4   G 
2    B  5   H 
3    C  1   A 
3    C  2   B 
3    C  3   C 

उत्तर

10

तुम सिर्फ एक अलग श्रेणी फ़ंक्शन का उपयोग करना,

dense_rank() OVER (ORDER BY Column1) as Column1_ID 

http://msdn.microsoft.com/en-us/library/ms173825.aspx

एसक्यूएल फिडल: http://www.sqlfiddle.com/#!6/d41d8/1832

+0

+1 छोड़कर आप 'partition' नहीं करना चाहती अन्यथा, वे सभी मूल्य '1' के साथ बाहर आते हैं: http://www.sqlfiddle.com/#!6/d41d8/1829 – mellamokb

+0

यूप, बस एहसास हुआ कि मुझे इसे हटा दिया गया है: http://www.sqlfiddle.com/#! 6/d41d8/1832 – Andrew

+0

मैंने उस समाधान की कोशिश की (जैसा कि आपने मूल रूप से पोस्ट किया था) और यह काम नहीं किया। मुझे नहीं पता था कि विभाजन वैकल्पिक था। धन्यवाद। यह वही करता है जो मुझे चाहिए। –