回答

收藏

在SQL Server行号中分配,但按值分组

技术问答 技术问答 171 人阅读 | 0 人回复 | 2023-09-13

我想从表中选择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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则