2013-01-03 14 views
5

değerinde gruplandırılmış Bir tablodan 2 sütun seçmek ve her değere bir int değeri atamak istiyorum. Ancak, 1. sütun kimliğinin aynı olan tüm değerler için aynı olmasını istiyorum.SQL Server'da bir Satır Numarası Atama, ancak

2. sütun için, her değerin de numaralandırılmasını istiyorum, ancak ilk sütuna göre bölümlenmiş. Bu parçayı çözdüm ama işe ilk kısmı alamıyorum.

Kullanmakta olduğum test senaryosu. Bunu çalıştırdığınızda

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 değerler doğrudur, ama ben şöyle Column1_ID olmak için değerleri istiyorum.

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 

cevap

10
Sadece farklı bir sıralama işlevi kullanmanız gerekir

,

dense_rank() OVER (ORDER BY Column1) as Column1_ID 

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

SQL Fiddle: http://www.sqlfiddle.com/#!6/d41d8/1832

+0

+1 'partition' istemiyoruz dışında, aksi hepsi "1" değeriyle ortaya çıkıyor: http://www.sqlfiddle.com/#!6/d41d8/1829 – mellamokb

+0

Yup, sadece kaldırılmam gerektiğini fark ettim: http://www.sqlfiddle.com/#! 6/d41d8/1832 – Andrew

+0

Bu çözümü denedim (ilk yayınladığınız gibi) ve işe yaramadı. Partinin isteğe bağlı olduğunu bilmiyordum. Teşekkürler. Bu tam ihtiyacım olan şeyi yapar. –

İlgili konular