SQL如何从上一行更新一行?

DSQuest

我有一张带有产品配置的表格。

在此处输入图片说明

id_conf与具有标题的产品(colspan_title)逐行连接,而colspan_no中的行数即id_conf 4461-4465与来自4461行的colspan_title连接。

如何编写将每个id_conf与colspan_title联接在一起的查询?是否可以从上方的单元格更新单元格?

文字数据:

id_conf position    proj_id colspan_no  colspan_title  
4460    1           575     1           prod1  
4461    2           575     5           prod2  
4462    3           575     0     
4463    4           575     0     
4464    5           575     0     
4465    6           575     0     
4466    7           575     2           prod3  
4467    8           575     0     
4468    9           575     3           prod4  
4469    11          575     0     
4470    10          575     0     
4471    12          575     3           prod5  
4472    14          575     0     
4473    13          575     0     

预期输出所有id_conf都具有colspan_title

感谢DS

去世

您可以使用窗口功能SUM()以及FIRST_VALUE()可更新的CTE:

WITH cte AS (
  SELECT *, FIRST_VALUE(colspan_title) OVER (PARTITION BY grp ORDER BY id_conf) title
  FROM (
    SELECT *, SUM(colspan_no) OVER (ORDER BY id_conf) grp
    FROM tablename
  ) t  
)
UPDATE cte 
SET colspan_title = title
WHERE colspan_no = 0

如果行的顺序没有被定义的id_conf,而是由position变化ORDER BY id_conf中的OVER两个条款SUM(),并FIRST_VALUE()ORDER BY position

参见演示
结果:

> id_conf | position | proj_id | colspan_no | colspan_title
> ------: | -------: | ------: | ---------: | :------------
>    4460 |        1 |     575 |          1 | prod1        
>    4461 |        2 |     575 |          5 | prod2        
>    4462 |        3 |     575 |          0 | prod2        
>    4463 |        4 |     575 |          0 | prod2        
>    4464 |        5 |     575 |          0 | prod2        
>    4465 |        6 |     575 |          0 | prod2        
>    4466 |        7 |     575 |          2 | prod3        
>    4467 |        8 |     575 |          0 | prod3        
>    4468 |        9 |     575 |          3 | prod4        
>    4469 |       11 |     575 |          0 | prod4        
>    4470 |       10 |     575 |          0 | prod4        
>    4471 |       12 |     575 |          3 | prod5        
>    4472 |       14 |     575 |          0 | prod5        
>    4473 |       13 |     575 |          0 | prod5        
>    4474 |       15 |     575 |          3 | prod6        
>    4475 |       17 |     575 |          0 | prod6        
>    4476 |       16 |     575 |          0 | prod6   

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章