我想从表中选择2列,并为每个值分配一列int值。但是,我希望第一列ID所有相同的值都是相同的。 6 c# ]" z1 H; h5 N- r* ^0 k% C: o! R对于第二列,我希望每个值也应该编号,但应该按照第一列进行分区。我已经弄清楚了这一部分,但我不能让第一部分开始工作。 / z ~" w% k" B8 K5 O( K! Y这是我正在使用的测试计划。 " `4 [3 @8 ]2 g/ H$ \3 pDECLARE @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, Column2FROM @TestTable当我运行它时,Column2_ID中值是正确的,但我希望Column1_ID的值如下。7 w! }5 R4 \: _# E. G' _
Column1_ID Column1 Column2_ID Column211 A A A B A 3 3 C2 B D2 B E2 B 3 3 F2 B 4 4 G2 B 5 5 5 5 H3 3 C A3 3 C B3 3 C 3 3 C 4 q, |+ }& R$ x5 C, e5 k7 }解决方案: * C2 r1 q+ Q3 x$ {0 O2 q
您只需要使用其他排名功能,$ L# _2 v( W) r& |' l4 e2 n, z
dense_rank() OVER (ORDER BY Column1) as Column1_IDhttp://msdn.microsoft.com/en-3 r4 z- [: B) E5 |' o
us/library/ms173825.aspx $ h# }9 l T8 ]( @SQL小提琴:http ' y5 e5 @; I1 o" v://www.sqlfiddle.com/#!6 / 8 Y3 n; S+ j, I0 Z5 {" hd41d8/1832