2

以下のスクリプトを参照してください

            declare @table1 table
            (
            col1 int
            )  

            insert into @table1 values(1)
            insert into @table1 values(3)
            insert into @table1 values(3)
            insert into @table1 values(6)
            insert into @table1 values(4)
            insert into @table1 values(4)
            insert into @table1 values(4) 

以下のクエリは

            select col1 ,COUNT(col1) cntCol1 from @table1 group by col1

この出力

            ----------------
            col1   | cntCol1
            -------| -------
            | 1    | 1    | 
            | 3    | 2    | 
            | 4    | 3    | 
            | 6    | 1    | 
            ---------------

以下の出力を取得することは可能ですか

            ----------------
            col1   | cntCol1
            -------| -------
            | 1    | 1    | 
            | 3    | 1    | 
            | 3    | 2    |  
            | 4    | 1    |  
            | 4    | 2    |  
            | 4    | 3    | 
            | 6    | 1    | 
            ---------------

もしそうなら、質問を手伝ってくれませんか。

ありがとう、エセン。

4

3 に答える 3

3

これを試して:

select 
    col1, 
    Sequence = ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col1)
from 
    @table1 

このROW_NUMBER()関数は、データの「パーティション」ごとに、1 から始まる連続した数字を割り出します (この場合col1、テーブル内の個別の値ごとに)。

于 2012-11-02T21:25:17.817 に答える
3

SQL フィドル

      SELECT col1, ROW_NUMBER() OVER (partition by col1 order by col1) cntCol1
        FROM @table1
    ORDER BY col1, cntCol1    

サンプルデータ:

 declare @table1 table
            (
            col1 int
            )  

            insert into @table1 values(1)
            insert into @table1 values(3)
            insert into @table1 values(3)
            insert into @table1 values(6)
            insert into @table1 values(4)
            insert into @table1 values(4)
            insert into @table1 values(4) 

結果:

| COL1 | CNTCOL1 |
------------------
|    1 |       1 |
|    3 |       1 |
|    3 |       2 |
|    4 |       1 |
|    4 |       2 |
|    4 |       3 |
|    6 |       1 |
于 2012-11-02T21:26:01.980 に答える
1
select *, rn=row_number() over (partition by col1 order by col1 )
  from @table1
于 2012-11-02T21:28:51.440 に答える