0

大きなクエリがあり(必要に応じてすでに順序付けられています)、列の1つが計算されます(クエリ内の他の列のvarcharの組み合わせ)。この計算された列を識別するために増分整数が必要です(重複は同じIDを持つ必要があります)。増分数が必要な順序は、計算列の生成に使用されたものとは別の基準を使用しているため、ランクを使用できません。

これは私が必要なものです:

OrderByColumn              CalculatedColumn          GeneratedId
    1                        ggg                       1
    1                        aaa                       2
    1                        ggg                       1
    1                        fff                       3
    2                        vvv                       4
    2                        ddd                       5
    3                        ggg                       1
    4                        rrr                       6
    5                        aaa                       2
    5                        ooo                       7
    5                        kkk                       8
    8                        vvv                       4
    9                        aaa                       2
4

1 に答える 1

3

使用する

ROW_NUMBER() OVER (PARTITION BY XXX ORDER BY YYY) 

SQL2005以降を使用していると仮定します

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

-あなたが言ったように、これは同じIDのものであなたの重複を解決しませんが-ああ!ちょっと待ってください-これはかなり簡単にできるはずです

編集:

どうぞ -

http://sqlfiddle.com/#!3/2f014/2

-- Select stuff:
select vals.val as genid, ord.* from ord
-- Join back to a distinct list of CalculatedColumn with a row_number() to id them
inner join
(select calculatedcolumn, row_number() over (order by calculatedcolumn) as val  from ord group by calculatedcolumn) as vals on vals.calculatedcolumn = ord.calculatedcolumn
order by ord.orderbycolumn

もちろん、これはサブクエリで計算列を使用しているため、一時テーブルまたはテーブル変数に値を格納しない限り、再計算する必要があります

于 2012-08-07T13:17:44.350 に答える