Jef*_*ddy 5 sql t-sql sql-server
我想从表中选择2列,并为每个值分配一个int值.但是,我希望第一列ID对于所有相同的值都相同.
对于第二列,我希望每个值都编号,但是按第一列分区.我已经想出了这篇文章,但我无法让第一部分工作.
这是我正在使用的测试场景.
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
Run Code Online (Sandbox Code Playgroud)
当我运行它时,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
Run Code Online (Sandbox Code Playgroud)
And*_*rew 10
你只需要使用不同的排名功能,
dense_rank() OVER (ORDER BY Column1) as Column1_ID
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms173825.aspx
SQL小提琴:http://www.sqlfiddle.com/#!6 / d41d8/1832
| 归档时间: |
|
| 查看次数: |
5114 次 |
| 最近记录: |