我有一张带有产品配置的表格。
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] 删除。
我来说两句