0

我有一个大查询(已根据我的需要排序),其中一列被计算(查询中其他列的 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 回答