db2 使用select更新给定条件的行:二进制数据库

rkttyhzu  于 2022-12-23  发布在  DB2
关注(0)|答案(1)|浏览(196)

我正在尝试更新同一个表上带有select的行。在我的例子中,如果行的值在同一列中出现不止一个,我希望用0更新状态。
例如,item1出现了三次,这就是为什么我想将2的值更改为另一个状态为0的item1。
到目前为止,我已经尝试了我的代码,但我仍然在为预期的结果而奋斗。

select * from (
    UPDATE table_1 t1
    SET STATUS = 0 where exists (
    select t1.*, lag(ITEM, 1, 0) over (order by ITEM_1 ASC) as C2
    from table_1 AS t1) 
    WHERE ITEM_1 = C2)
#|ID| ITEM_1   |STATUS
-+--+---------+------
1|10| item1    |   1       
2|11| item1    |   1  
3|12| item1    |   1  
4| 7| item2    |   1  
5| 2| item3    |   1    
6| 9| item3    |   1     
7|13| item3    |   1      
8|14| item3    |   1

预期结果。

#|ID| ITEM_1   |STATUS|C2
-+--+---------+------+---------
1|10| item1    |   1  | 0        
2|11| item1    |   0  | item1
3|12| item1    |   0  | item1
4| 7| item2    |   1  | item1
5| 2| item3    |   1  | item2   
6| 9| item3    |   0  | item3     
7|13| item3    |   0  | item3     
8|14| item3    |   0  | item3
44u64gxh

44u64gxh1#

UPDATE
(
  SELECT 
    STATUS
  , ROW_NUMBER () OVER (PARTITION BY ITEM_1 ORDER BY ID) AS RN_
  FROM TABLE_1 T
)
SET STATUS = 0
WHERE RN_ <> 1;

SELECT * FROM TABLE_1 ORDER BY ITEM_1, ID;

| 识别号|项目_1|状态|
| - ------|- ------|- ------|
| 十个|项目1| 1个|
| 十一|项目1|无|
| 十二|项目1|无|
| 七|项目2| 1个|
| 第二章|项目3| 1个|
| 九|项目3|无|
| 十三|项目3|无|
| 十四|项目3|无|
fiddle

相关问题