0

Table_neme:従業員の詳細

--------------------------------------------
c_bp_id | value | name  |address
--------------------------------------------
10001   |001    |john   |
10002   |mathew |mathew |
10003   |002    |Ann    |
10004   |003    |isabel |
10005   |maria  |maria  |
10006   |Adam   |Adam   |

列の「値」を変更したい

--------------------------------------------
c_bp_id | value | name  |address
--------------------------------------------
10001   |001    |john   |
10002   |**005**|mathew |
10003   |002    |Ann    |
10004   |003    |isabel |
10005   |**006**|maria  |
10006   |**007**|Adam   |

親切に私を助けてください?

4

1 に答える 1

1

それは次のようなものかもしれません:

with cte as (
    -- create row_numbers for all values where value is text
    select
        c_bp_id,
        row_number() over(order by c_bp_id) as rn
    from Table1
    where value !~ E'^\\d+$'
)
-- updated
update Table1 as t set
    value = lpad((rn + 1 + (select coalesce(max(value::int), 0) from Table1 where value ~ E'^\\d+$'))::text, 3, '0')
from cte as c
where c.c_bp_id = t.c_bp_id;

sql fiddle demo

これは奇妙なクエリであり、これを本番環境に置くことはお勧めしませんが、1 回限りの更新であれば使用できます。004また、なぜvalueをスキップして から数え始めたのかもわかりません005

于 2013-09-17T06:31:20.563 に答える