首页 > 解决方案 > 如何更新要反转的sql表计数器字段编号?

问题描述

我有一张桌子,上面有两个物品和一个柜台。我想更新计数器字段,以便反转计数器字段编号。比如从小到大,从大到小。

ID 物品
1 一个 1
2 b 1
3 一个 2
4 b 2

更新后

ID 物品
1 一个 2
2 b 2
3 一个 1
4 b 1

标签: sql

解决方案


如果我这样走:

with aux (id, item, no) as(
    select 1, 'a', 1 from dual union all
    select 2, 'b', 1 from dual union all
    select 3, 'a', 1 from dual union all
    select 4, 'b', 1 from dual)
SELECT
    id,
    item,
    ROW_NUMBER() OVER(
        PARTITION BY item
        ORDER BY
            id ASC
    ) no
FROM
    aux
ORDER BY
    id;

我的输出是:

id  item no
-----------
1   a   1
2   b   1
3   a   2
4   b   2

但是,如果我这样做:

with aux (id, item, no) as(
    select 1, 'a', 1 from dual union all
    select 2, 'b', 1 from dual union all
    select 3, 'a', 1 from dual union all
    select 4, 'b', 1 from dual)
SELECT
    id,
    item,
    ROW_NUMBER() OVER(
        PARTITION BY item
        ORDER BY
            id DESC
    ) no
FROM
    aux
ORDER BY
    id;

我的输出是:

id  item no
-----------
1   a   2
2   b   2
3   a   1
4   b   1

推荐阅读