2

私は次のクエリを持っています:

declare @temp1 table
(ID1 int not null,
 ID2 int not null)

set nocount off

insert into @temp1 values(1453,931)
insert into @temp1 values(1454,931)
insert into @temp1 values(1455,931)

insert into @temp1 values(2652,1101)
insert into @temp1 values(2653,1101)
insert into @temp1 values(2654,1101)
insert into @temp1 values(2655,1101)
insert into @temp1 values(2656,1101)

insert into @temp1 values(3196,1165)

insert into @temp1 values(3899,1288)
insert into @temp1 values(3900,1288)
insert into @temp1 values(3901,1288)
insert into @temp1 values(3902,1288)

--select * from @temp1

select ID1,ID2, ROW_NUMBER() over(partition by ID2 order by ID1) as RowNum1
from @temp1

私が今やりたいのは、すべてのID2をグループ化する新しい列を作成することです。つまり、931のID2の新しい列の値は1、1101の値は2、1165の値は3、最後にすべての1288の値は4です。 ..助けてもらえますか?

4

1 に答える 1

8

DENSE_RANK()結果を達成するために使用できます。結果セットのパーティション内の行のランクを、ランクにギャップなしで返します。行のランクは、1に、問題の行の前にある個別のランクの数を加えたものです。詳細については、リンクDENSE_RANK(Transact-SQL)を参照してください。してみてください:

select ID1, ID2, DENSE_RANK() over(order by ID2) as RowNum1
from @temp1
于 2013-01-16T06:31:31.097 に答える